Rust 如何创建不同类型的HashMap并测试它们是否相等?
我有一个包含多个键和值的源JSON,我想获取几个目标JSON,并检查它们是否是该JSON的子集:目标JSON中的所有字段都存在于源JSON中,并持有相同的值 为了实现这一点,我想在Rust 如何创建不同类型的HashMap并测试它们是否相等?,rust,Rust,我有一个包含多个键和值的源JSON,我想获取几个目标JSON,并检查它们是否是该JSON的子集:目标JSON中的所有字段都存在于源JSON中,并持有相同的值 为了实现这一点,我想在HashMap的值部分放置几个不同类型的值,并对这些值调用equals 映射中有几种类型的值,我想接受一些键值对并检查 钥匙在地图上 该值与地图中的值相同 这是我想用Java做的一个例子: 布尔isInMap(映射映射、字符串键、对象值){ 返回map.containsKey(键)和&map.get(键).equals
HashMap
的值部分放置几个不同类型的值,并对这些值调用equals
映射中有几种类型的值,我想接受一些键值对并检查
布尔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?此外,在模式匹配中,正确的匹配臂是在编译中静态链接的,还是运行时检查?在一般情况下,它必须是运行时检查。毕竟,变量可能来自源代码之外。我确信优化器消除了某些常量情况。有。