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]
以上是 Rust 编程中的 HashSet 的全部内容, 来源链接: utcz.com/z/327557.html