Collections 如何通过结构相等性检查结构集合中的结构?
如果我有一个结构:Collections 如何通过结构相等性检查结构集合中的结构?,collections,rust,traits,equality,Collections,Rust,Traits,Equality,如果我有一个结构: pub struct Test { val1: u8, val2: u8, } 我做了一个vec,其中包括: let a = Test{val1: 1, val2: 1}; let b = Test{val1: 1, val2: 2}; let c = Test{val1: 1, val2: 2}; let my_vec = vec![a, b]; 如何判断my_vec是否包含与c值相同的结构?您需要按照中的说明执行PartialEq和eq方法 您需要执行
pub struct Test {
val1: u8,
val2: u8,
}
我做了一个vec代码>,其中包括:
let a = Test{val1: 1, val2: 1};
let b = Test{val1: 1, val2: 2};
let c = Test{val1: 1, val2: 2};
let my_vec = vec![a, b];
如何判断my_vec是否包含与c值相同的结构?您需要按照中的说明执行PartialEq和eq方法
您需要执行PartialEq和eq方法,如中所述
Vec
有一个方法,contains
,用于检查它是否包含特定值。该方法要求元素实现PartialEq
,您可以这样自动派生:
#[derive(PartialEq)]
pub struct Test {
val1: u8,
val2: u8,
}
现在你可以做:
assert!(my_vec.contains(&c));
如果您的集合变大,这将是非常低效的,因为它必须对每个元素进行比较,直到找到一个匹配的元素。HashSet
效率更高,但它本身也需要实现Eq
和Hash
。幸运的是,它们通常可以以相同的方式导出。Vec
有一个方法,contains
,用于检查它是否包含特定值。该方法要求元素实现PartialEq
,您可以这样自动派生:
#[derive(PartialEq)]
pub struct Test {
val1: u8,
val2: u8,
}
现在你可以做:
assert!(my_vec.contains(&c));
如果您的集合变大,这将是非常低效的,因为它必须对每个元素进行比较,直到找到一个匹配的元素。HashSet
效率更高,但它本身也需要实现Eq
和Hash
。幸运的是,这些通常可以用同样的方式导出。我想我只需要impl PartialEq…我想我只需要impl PartialEq…对于这个例子,对于大多数情况,派生就足够了。对于这个例子,对于大多数情况,派生就足够了。更准确地说,contains()
方法是为切片定义的,更准确地说,contains()
方法是为切片定义的,它可以通过deref强制对向量使用。