Rust 编程中的 HashSet
rust programmingserver side programmingprogramming
Rust 还为我们提供了一个 HashSet 数据结构,主要用于确保数据结构中不存在重复值的情况。
如果我们尝试将新值插入到已经存在的 HashSet 中,则先前的值将被我们插入的新值覆盖
除了主要功能外,HashSet 还用于执行以下操作 −
- union − 提取两个集合中的所有唯一元素。
- difference −获取第一个集合中存在但不在第二个集合中的所有元素。
- intersection −获取两个集合中都存在的所有元素。
- 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()` returns false if value already present assert!(b.insert(4), "Value 4 is already in set B!"); b.insert(5); }
在此示例中,我们创建了一个 HashSet,然后将值插入其中。如果我们尝试插入已经存在的值,则 insert() 函数将返回 false。因此,上述代码将返回错误。
输出
thread 'main' panicked at 'Value 4 is already in set 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]