Rust で 2つのセットの差を計算する
Nilesh Katuwal
2023年6月21日
この記事では、2つのセットの差を計算する組み込み関数について説明します。
Rustのハッシュセット
ハッシュセットは、値が ()
である HashMap
として実装されます。 型と同様に、HashSet
の要素は Eq
および Hash
トレイトを実装する必要があります。
通常、これは #[derive(PartialEq, Eq, hash)]
で実現できます。 ただし、これらを独自に実装する場合は、次の特性が保持されている必要があります。
構文:
let mut HashSet_name= HashSet::new();
2つのキーが等しいかどうかを知る必要があります。 それらのハッシュも等しくなければなりません。
例:
fn main() {
use std::collections::HashSet;
let mut foods = HashSet::new();
foods.insert("I love to eat".to_string());
foods.insert("Ramen with cheese".to_string());
foods.insert("Ramen with eggs".to_string());
foods.insert("Ramen with seaweed".to_string());
if !foods.contains("Sesame") {
println!("We have {} foods, but sesame is not the one I wanted.",
foods.len());
}
foods.remove("Ramen with eggs.");
for food in &foods {
println!("{food}");
}
}
出力:
We have 4 foods, but sesame is not the one I wanted.
Ramen with cheese
Ramen with seaweed
Ramen with eggs
I love to eat
HashSet
に値を挿入すると (つまり、新しい値は既存の値と同一で、両方とも同じハッシュを持つ)、古い値が新しい値に置き換えられます。
セットには 4つの基本的な操作があります (後続の各呼び出しは反復子を返します)。
union
- 両方のセットからすべての異なる要素を取得します。difference
- 2 番目のセットがない最初のセットからすべての要素を取得します。intersection
- 両方のセットの一意の要素をすべて取得します。対称差分
- 両方ではなくいずれかのセットのすべての要素を取得します。
以下は、セット間の違いを見つけるための例です。 違いが対称的ではないことを知る必要があります。
fn main() {
use std::collections::HashSet;
let x = HashSet::from([1, 2, 3]);
let y = HashSet::from([4, 2, 3, 4]);
for z in x.difference(&y) {
println!("{z}");
}
let diff: HashSet<_> = x.difference(&y).collect();
assert_eq!(diff, [1].iter().collect());
let diff: HashSet<_> = y.difference(&x).collect();
assert_eq!(diff, [4].iter().collect());
}
出力:
1
Rust で 2つのセットの差を計算する
このプログラムは、2つの HashSets
を作成して整数要素を格納し、2つのセットの違いを見つけて、結果を表示します。 これら 2つの HashSets
は、次のソース コードで整数要素を格納できます。
2つのセットの違いは、difference()
テクニックを使用して決定されました。 次に、結果を印刷しました。
use std::collections::HashSet;
fn main() {
let first_set: HashSet<_> = [10, 20, 30, 40].iter().cloned().collect();
let second_set: HashSet<_> = [10, 20, 30].iter().cloned().collect();
println!("The difference betwen first_set and second_set is:");
for d in first_set.difference(&second_set) {
print!("{} ", d);
}
}
出力:
The difference betwen first_set and second_set is:
40