CodeBlanks Logo Icon CodeBlanks

Özet - Koleksiyonlar

HashMap ve Entry API'yi birleştirerek bir kelime sayacı yazarsın.

Koleksiyonlar özeti

HashMap: hızlı anahtar-değer, sırasız. BTreeMap: sıralı, aralık sorguları. HashSet/BTreeSet: tekil değerler ve küme işlemleri. entry API ile "yoksa ekle, varsa güncelle" tek aramada yapılır: or_insert, or_default, and_modify. Dolaşma &, &mut ya da sahiplikle yapılır; sırasız yapıların çıktısı yazdırılmadan önce sıralanmalıdır.

Gruplama

BTreeMap ve or_default birlikte, sıralı bir gruplama verir:

let mut gruplar: BTreeMap<char, Vec<&str>> = BTreeMap::new();
for k in "elma armut erik ayva kiraz".split_whitespace() {
    let ilk = k.chars().next().unwrap();
    gruplar.entry(ilk).or_default().push(k);
}
for (h, liste) in &gruplar {
    println!("{h}: {}", liste.join(", "));
}

Uygulama Baş harfe göre grupla

"elma armut erik ayva kiraz" kelimelerini BTreeMap<char, Vec<&str>> içinde baş harflerine göre grupla (or_default). Her grubu harf: kelime, kelime biçiminde ayrı satırlara yazdır.

Başlangıç kodu

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

fn main() {
    // buraya yaz
}

Örnek çözüm

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

fn main() {
    let mut gruplar: BTreeMap<char, Vec<&str>> = BTreeMap::new();
    for k in "elma armut erik ayva kiraz".split_whitespace() {
        let ilk = k.chars().next().unwrap();
        gruplar.entry(ilk).or_default().push(k);
    }
    for (h, liste) in &gruplar {
        println!("{}: {}", h, liste.join(", "));
    }
}

Beklenen çıktı

a: armut, ayva
e: elma, erik
k: kiraz

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir sözlükte kelimeleri baş harfe göre gruplamak için en uygun değer türü hangisi?

  • Vec<&str> Doğru cevap
  • &str
  • usize
  • bool

Açıklama: Her anahtara birden çok kelime düşer; entry(..).or_default().push(k) deseni bunu doğal biçimde kurar.

2 Varsayılanla başlat

Soru
gruplar.entry(ilk).____().push(k);
Cevap
gruplar.entry(ilk).or_default().push(k);

Açıklama: or_default yoksa boş bir Vec koyar.

3 Grubun özeti

Kavram Anlamı
HashMap Hızlı, sırasız
BTreeMap Sıralı anahtarlar
HashSet Tekil değerler
entry Tek aramada güncelleme

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