Rust 编程中的 HashSet
Rust 也为我们提供了 HashSet 数据结构,当我们希望确保我们的数据结构中没有重复的值时,主要会使用该结构。
如果我们尝试将一个新值插入到一个 HashSet 中,而该值已经存在,那么我们插入的旧值会被新值覆盖
除了这些主要特性以外,HashSet 还用于执行以下操作 −
- 并集 − 提取两个集合中的所有唯一元素。
- 差集 − 获取第 1 个集合中但第 2 个集合中没有的所有元素。
- 交集 − 获取两个集合中都存在的的所有元素。
- 对称差 − 获取在一个集合中或另一个集合中,但不在两个集合中同时存在的所有元素。
例如
考虑如下所示的示例 −
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]
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP