CodeBlanks Logo Icon CodeBlanks

HashSet

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")); // false

insert'ı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] 5

Sı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

main.rs
use std::collections::HashSet;

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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(&amp;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

Soru
let ortak: Vec<i32> = a.____(&b).copied().collect();
Cevap
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}

Orta seviye bölümündeki tüm dersler