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

回到顶部