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