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

时间:2018-01-13 16:25:15

标签: rust

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

为实现这一目标,我想在HashMap的值部分放置多个不同类型的值,并在这些值上调用equals

地图中有几种类型的值,我想接受一些键值对并检查是否

  1. 密钥在地图中
  2. 该值与地图中的值相同。
  3. 这是我想用Java做的一个例子:

    boolean isInMap(Map<String, Object> map, String key, Object value) {
        return map.containsKey(key) && map.get(key).equals(value);
    }
    

    这可能是XY question,但我怎么能在Rust中执行此操作?

1 个答案:

答案 0 :(得分:0)

在Serde JSON库中它几乎是what @mcarton referred to,只有我使用了枚举匹配,我不确定它是否更好。

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