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]