Entry API
- Rust kursu
- Orta seviye
- Ders 57/115
- 4 dk
Entry API ile haritaya güvenli ekleme yaparsın.
Entry API
"Anahtar yoksa ekle, varsa güncelle" işi için entry kullanılır. Tek arama yapar ve değere değiştirilebilir referans verir:
let metin = "elma armut elma kiraz elma armut";
let mut sayim = HashMap::new();
for k in metin.split_whitespace() {
*sayim.entry(k).or_insert(0) += 1;
}or_insert(0) anahtar yoksa 0 koyar ve her durumda &mut V döndürür; * ile çözülüp artırılır.
Diğer entry yöntemleri
or_default() türün varsayılanını koyar; and_modify yalnızca var olan değeri değiştirir:
let mut gruplar: HashMap<char, Vec<&str>> = HashMap::new();
for k in ["elma", "erik", "ayva"] {
gruplar.entry(k.chars().next().unwrap()).or_default().push(k);
}
let mut puan = HashMap::new();
puan.entry("ali").and_modify(|p| *p += 10).or_insert(50); // yoksa 50, varsa +10Uygulama Kelime sayımı
"elma armut elma kiraz elma armut" metnindeki kelimeleri entry(..).or_insert(0) ile say. Sonucu bir Vec'e topla, sırala ve {:?} ile yazdır.
Başlangıç kodu
use std::collections::HashMap;
fn main() {
// buraya yaz
}Örnek çözüm
use std::collections::HashMap;
fn main() {
let metin = "elma armut elma kiraz elma armut";
let mut sayim = HashMap::new();
for k in metin.split_whitespace() {
*sayim.entry(k).or_insert(0) += 1;
}
let mut v: Vec<(&str, i32)> = sayim.into_iter().collect();
v.sort();
println!("{:?}", v);
}Beklenen çıktı
[("armut", 2), ("elma", 3), ("kiraz", 1)]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>or_insert_with(Vec::new)</code> ile <code>or_insert(Vec::new())</code> farkı nedir?
- or_insert hata verir
- or_insert_with sıralar
- or_insert_with değeri yalnızca anahtar yoksa üretir Doğru cevap
- Fark yok
Açıklama: or_insert argümanı her zaman hesaplanır; pahalı varsayılanlar için or_insert_with ya da or_default tercih edilir.
2 Yoksa başlat
*sayim.entry(k).____(0) += 1;
*sayim.entry(k).or_insert(0) += 1;
Açıklama: or_insert yoksa değeri koyar ve &mut V döndürür.
3 Yöntem ve davranışı
| Kavram | Anlamı |
|---|---|
or_insert(v) |
Yoksa v koy |
or_insert_with(f) |
Yoksa f() çağır |
or_default() |
Yoksa Default |
and_modify(f) |
Varsa değiştir |