Rust 如何创建不同类型的HashMap并测试它们是否相等?

Rust 如何创建不同类型的HashMap并测试它们是否相等?,rust,Rust,我有一个包含多个键和值的源JSON,我想获取几个目标JSON,并检查它们是否是该JSON的子集:目标JSON中的所有字段都存在于源JSON中,并持有相同的值 为了实现这一点,我想在HashMap的值部分放置几个不同类型的值,并对这些值调用equals 映射中有几种类型的值,我想接受一些键值对并检查 钥匙在地图上 该值与地图中的值相同 这是我想用Java做的一个例子: 布尔isInMap(映射映射、字符串键、对象值){ 返回map.containsKey(键)和&map.get(键).equals

我有一个包含多个键和值的源JSON,我想获取几个目标JSON,并检查它们是否是该JSON的子集:目标JSON中的所有字段都存在于源JSON中,并持有相同的值

为了实现这一点,我想在
HashMap
的值部分放置几个不同类型的值,并对这些值调用
equals

映射中有几种类型的值,我想接受一些键值对并检查

  • 钥匙在地图上
  • 该值与地图中的值相同
  • 这是我想用Java做的一个例子:

    布尔isInMap(映射映射、字符串键、对象值){
    返回map.containsKey(键)和&map.get(键).equals(值);
    }
    
    这可能是一个错误,但如何在Rust中做到这一点呢?

    它几乎在Serde JSON库中,只是我使用了枚举匹配,我不确定这是否更好

    enum Value {
        Str(String),
        Int(i32),
        // other value types
    }
    
    impl PartialEq for Value {
        fn eq(&self, other: &Value) -> bool {
            match *self {
                Value::Str(ref s1) => match *other {
                    Value::Str(ref s2) => s1 == s2,
                    _ => false
                },
                Value::Int(i1) => match *other {
                    Value::Int(i2) => i1 == i2,
                    _ => false
                },
                // other implementations
            }
        }
    }
    

    由于我需要支持的类型少于Serde中提供的类型,并且我正在尝试使用Rust,因此我创建了自己的枚举,而不是使用
    Serde_json::Value

    您看过Rust中的枚举吗?这里不需要使用
    对象
    ,只需使用
    ;这与@mcarton在serde JSON库中提到的内容非常相似——为什么不直接使用
    serde_JSON::Value
    ?为什么要创造自己的呢?@Shepmaster有两个原因。首先,我需要支持的类型比
    serde
    中提供的类型少。第二,我正在尝试生锈,所以我想自己解决这个问题。通常情况下,这样的匹配会很好。在这种情况下,您可以。@Shepmaster太棒了!我不知道你可以在枚举上
    #[派生(PartialEq)]
    ,看着操场上的代码,它似乎在做同样的事情(它们之间相差约20行),枚举上的
    #[派生(PartialEq)]
    是否编译为
    匹配
    es?此外,在模式匹配中,正确的匹配臂是在编译中静态链接的,还是运行时检查?在一般情况下,它必须是运行时检查。毕竟,变量可能来自源代码之外。我确信优化器消除了某些常量情况。有。