Rust 编程中的 HashSet
Rust还为我们提供了一个HashSet数据结构,主要用于当我们想要确保我们的数据结构中不存在重复值时。
如果我们尝试将一个新值插入到已经存在的HashSet中,那么之前的值会被我们插入的新值覆盖
除了关键功能外,HashSet还用于执行以下操作-
union-提取两个集合中的所有唯一元素。
差异-G获取存在于第一组中但不存在于第二组中的所有元素。
交集-获取两个集合中存在的所有元素。
symmertric_difference -获取一个集合或另一个集合中的所有元素,但不是两个集合中的所有元素。
示例
考虑下面显示的例子-
use std::collections::HashSet; fn main() { let mut a: HashSet = vec![1i32, 2, 3].into_iter().collect(); let mut b: HashSet = vec![2i32, 3, 4].into_iter().collect(); assert!(a.insert(4)); assert!(a.contains(&4)); //`HashSet::insert()`如果值已经存在则返回false assert!(b.insert(4), "值4已经在集合B中!"); b.insert(5); }
在此示例中,我们创建了一个HashSet,然后将值插入其中。如果我们尝试插入已经存在的值,那么该insert()函数将返回false。因此上面的代码将返回一个错误。
输出结果
thread 'main' panicked at '值4已经在集合B中!', src/main.rs:11:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
示例
现在让我们尝试使用HashSet上可用的所有方法。考虑下面显示的例子-
use std::collections::HashSet; fn main() { let mut a: HashSet = vec![1i32, 2, 3].into_iter().collect(); let mut b: HashSet = vec![2i32, 3, 4].into_iter().collect(); assert!(a.insert(4)); assert!(a.contains(&4)); b.insert(6); println!("A: {:?}", a); println!("B: {:?}", b); println!("Union: {:?}", a.union(&b).collect::>()); println!("Difference: {:?}", a.difference(&b).collect::>()); println!("Intersection: {:?}", a.intersection(&b).collect::>()); println!("Symmetric Difference: {:?}", a.symmetric_difference(&b).collect::>()); }输出结果
A: {1, 2, 3, 4} B: {4, 6, 2, 3} Union: [1, 2, 3, 4, 6] Difference: [1] Intersection: [2, 3, 4] Symmetric Difference: [1, 6]