如何通过结构相等性检查结构集合中的结构?

Rob*_*Rob 1 collections equality traits rust

如果我有一个结构:

pub struct Test {
    val1: u8,
    val2: u8,
}
Run Code Online (Sandbox Code Playgroud)

我做了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];
Run Code Online (Sandbox Code Playgroud)

如何判断是否my_vec包含与 c 具有相同值的结构?

Pet*_*all 5

Vec有一个方法,contains用于检查它是否包含特定值。该方法要求元素实现PartialEq,您可以像这样自动派生:

#[derive(PartialEq)]
pub struct Test {
    val1: u8,
    val2: u8,
}
Run Code Online (Sandbox Code Playgroud)

所以现在你可以这样做:

assert!(my_vec.contains(&c));
Run Code Online (Sandbox Code Playgroud)

如果您的集合变得很大,这将非常低效,因为它必须与每个元素进行比较,直到找到匹配的元素。AHashSet会更有效,但也有它自己的要求,您也需要Eq实现Hash。幸运的是,这些通常可以通过相同的方式导出。