Koleksiyon iterasyonu
- Rust kursu
- Orta seviye
- Ders 58/115
- 4 dk
HashMap ve Vec üzerinde iterasyon yöntemlerini öğrenirsin.
Koleksiyon iterasyonu
Haritalar üç biçimde dolaşılır; her biri farklı bir ödünç türüdür:
for (k, v) in &harita { } // (&K, &V)
for (k, v) in &mut harita { } // (&K, &mut V): değerler değiştirilebilir
for (k, v) in harita { } // (K, V): harita tüketilir
harita.keys() // &K
harita.values() // &V
harita.values_mut() // &mut VAnahtarlar hiçbir zaman değiştirilebilir verilmez; anahtarı değiştirmek hash'i bozardı.
Değerleri güncellemek ve süzmek
Tüm değerlere aynı işlemi uygulamak için values_mut; koşula uymayan girdileri silmek için retain:
let mut fiyat = HashMap::from([("kalem", 5), ("defter", 12), ("silgi", 2)]);
for v in fiyat.values_mut() {
*v *= 2;
}
fiyat.retain(|_, v| *v > 5);
let toplam: u32 = fiyat.values().sum(); // 10 + 24 = 34HashMap::from([...]) diziden doğrudan harita kurar.
Uygulama Fiyat güncelle
HashMap::from([("kalem", 5), ("defter", 12)]) ile başla. values_mut ile tüm fiyatları ikiye katla. Sıralanmış anahtar vektörünü ve değerlerin toplamını (u32) boşlukla yazdır.
Başlangıç kodu
use std::collections::HashMap;
fn main() {
// buraya yaz
}Örnek çözüm
use std::collections::HashMap;
fn main() {
let mut fiyat: HashMap<&str, u32> = HashMap::from([("kalem", 5), ("defter", 12)]);
for v in fiyat.values_mut() {
*v *= 2;
}
let mut anahtarlar: Vec<&str> = fiyat.keys().copied().collect();
anahtarlar.sort();
let toplam: u32 = fiyat.values().sum();
println!("{:?} {}", anahtarlar, toplam);
}Beklenen çıktı
["defter", "kalem"] 34
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Dolaşırken haritaya yeni anahtar eklenebilir mi?
- Yalnızca BTreeMap'te
- Hayır; dolaşma haritayı ödünç alır Doğru cevap
- Evet, her zaman
- Yalnızca HashMap'te
Açıklama: Eklenecekleri önce ayrı bir vektörde topla, döngüden sonra ekle; ya da retain ile yerinde süz.
2 Değerleri değiştir
for v in fiyat.____() {
*v *= 2;
}
for v in fiyat.values_mut() {
*v *= 2;
}
Açıklama: values_mut değerlere &mut referans verir.
3 Yöntem ve verdiği
| Kavram | Anlamı |
|---|---|
keys() |
&K |
values() |
&V |
values_mut() |
&mut V |
into_iter() |
(K, V) |