Özet - İteratörler
- Rust kursu
- Orta seviye
- Ders 53/115
- 5 dk
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); // 165sum, 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
fn main() {
// buraya yaz
}Örnek çözüm
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
let toplam = puan.iter().____(0, |acc, p| acc + p);
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 |