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强制对向量使用。