CodeBlanks Logo Icon CodeBlanks

Özet - İteratörler

map, filter ve collect'i birleştirerek bir kelime süzgeci yazarsın.

İteratörler özeti

Her yineleyici Iterator trait'ini uygular: type Item ve fn next. Bağdaştırıcılar (map, filter, take, zip, enumerate, chain) tembeldir ve yeni yineleyici döndürür; tüketenler (collect, sum, count, fold, for) sonucu üretir. collect hedef türe göre Vec, String, HashSet ya da Result üretebilir.

zip ve fold

zip iki yineleyiciyi ikililer halinde birleştirir; fold bir başlangıç değeriyle tüm elemanları tek bir sonuca indirger:

let adlar = ["Ali", "Ece"];
let puan = [70, 95];
for (a, p) in adlar.iter().zip(puan.iter()) {
    println!("{a}: {p}");
}
let toplam = puan.iter().fold(0, |acc, p| acc + p);   // 165

sum, max ve count aslında fold'un özel durumlarıdır.

Uygulama Puan tablosu

["Ali", "Ece"] ve [70, 95] dizilerini zip ile birleştirip her satırı ad: puan biçiminde yazdır. Ardından fold ile toplamı hesaplayıp toplam N yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    let adlar = ["Ali", "Ece"];
    let puan = [70, 95];
    for (a, p) in adlar.iter().zip(puan.iter()) {
        println!("{}: {}", a, p);
    }
    let toplam = puan.iter().fold(0, |acc, p| acc + p);
    println!("toplam {}", toplam);
}

Beklenen çıktı

Ali: 70
Ece: 95
toplam 165

Soru ve cevaplar

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

1 <code>[1, 2, 3].iter().zip(["a", "b"].iter()).count()</code> nedir?

  • 5
  • Panic
  • 2 Doğru cevap
  • 3

Açıklama: zip kısa olan yineleyici bitince durur.

2 İndirge

Soru
let toplam = puan.iter().____(0, |acc, p| acc + p);
Cevap
let toplam = puan.iter().fold(0, |acc, p| acc + p);

Açıklama: fold başlangıç değeri ve birleştirme closure'ı alır.

3 Grubun özeti

Kavram Anlamı
next() Tek adım
map/filter Tembel bağdaştırıcı
collect Koleksiyona toplar
fold Tek değere indirger

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