HashSet
- Rust kursu
- Orta seviye
- Ders 56/115
- 4 dk
HashSet ile benzersiz eleman kümesi oluşturursun.
HashSet
HashSet<T>, her değerden yalnızca bir tane tutan bir kümedir. Tekrarları temizlemek ve "bu var mı?" sorusunu hızlı yanıtlamak için kullanılır:
use std::collections::HashSet;
let mut gorulen = HashSet::new();
println!("{}", gorulen.insert("ali")); // true: yeni
println!("{}", gorulen.insert("ali")); // false: zaten vardı
println!("{}", gorulen.contains("ece")); // falseinsert'ın bool döndürmesi, "daha önce gördüm mü?" denetimini tek satırda yapmayı sağlar.
Küme işlemleri
Küme işlemleri referans veren yineleyiciler döndürür; sonucu toplamak ya da saymak gerekir. HashSet de sırasızdır, bu yüzden yazdırmadan önce sırala:
let a: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let b: HashSet<i32> = [3, 4, 5].into_iter().collect();
let mut ortak: Vec<i32> = a.intersection(&b).copied().collect();
ortak.sort();
println!("{:?} {}", ortak, a.union(&b).count()); // [3, 4] 5Sıralı bir küme gerekiyorsa BTreeSet kullanılır.
Uygulama Ortak elemanlar
[1, 2, 3, 4] ve [3, 4, 5] dizilerinden iki HashSet oluştur. Kesişimi sıralı bir vektöre topla; vektörü ve birleşimin eleman sayısını boşlukla yazdır.
Başlangıç kodu
use std::collections::HashSet;
fn main() {
// buraya yaz
}Örnek çözüm
use std::collections::HashSet;
fn main() {
let a: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let b: HashSet<i32> = [3, 4, 5].into_iter().collect();
let mut ortak: Vec<i32> = a.intersection(&b).copied().collect();
ortak.sort();
println!("{:?} {}", ortak, a.union(&b).count());
}Beklenen çıktı
[3, 4] 5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>a.intersection(&b)</code> ne verir?
- Yalnızca a'dakiler
- Tüm elemanlar
- Hiçbirinde olmayanlar
- İki kümede de olan elemanlar Doğru cevap
Açıklama: union birleşim, difference fark, symmetric_difference yalnızca birinde olanlardır.
2 Kesişim
let ortak: Vec<i32> = a.____(&b).copied().collect();
let ortak: Vec<i32> = a.intersection(&b).copied().collect();
Açıklama: intersection iki kümenin ortak elemanlarını verir.
3 İşlem ve sonuç (a = {1,2,3,4}, b = {3,4,5})
| Kavram | Anlamı |
|---|---|
intersection |
{3, 4} |
union |
{1, 2, 3, 4, 5} |
a.difference(&b) |
{1, 2} |
symmetric_difference |
{1, 2, 5} |