HashMap
HashDoS saldırılarına karşı korumalı standart özet haritası (hash map):
use std::collections::HashMap; fn main() { let mut page_counts = HashMap::new(); page_counts.insert("Fadiş", 207); page_counts.insert("Dede Korkut Hikayeleri", 751); page_counts.insert("Aşk-ı Memnu", 303); if !page_counts.contains_key("İnce Mehmed") { println!( "{} kitap hakkında bilgimiz var, ama İnce Mehmed hakkında yok.", page_counts.len() ); } for book in ["Aşk-ı Memnu", "Keloğlan Masalları "] { match page_counts.get(book) { Some(count) => println!("{book}: {count} sayfa"), None => println!("{book} bilinmiyor."), } } // Eğer bir şey bulunmazsa bir değer eklemek için .entry() metodunu kullanın. for book in ["Aşk-ı Memnu", "Keloğlan Masalları "] { let page_count: &mut i32 = page_counts.entry(book).or_insert(0); *page_count += 1; } dbg!(page_counts); }
-
HashMap
, başlangıç (prelude) kısmında tanımlı değildir ve kapsama (scope) alınması gerekir. -
Aşağıdaki kod satırlarını deneyin. İlk satır bir kitabın hash haritasında olup olmadığına bakar ve yoksa alternatif bir değer geri döndürür. İkinci satır, kitap bulunmazsa alternatif değeri hash haritasına ekler.
let pc1 = page_counts .get("Osmanlı Cadısı") .unwrap_or(&336); let pc2 = page_counts .entry("Gri Gökyüzü ") .or_insert(374);
-
vec!
’in aksine, maalesef standart birhashmap!
makrosu yoktur.-
Ancak, Rust 1.56’dan beri, HashMap
From<[(K, V); N]>
özelliğini (trait) gerçekleştirir (implement), bu da bir özet haritasını (hash map) bir değişmez (literal) diziden kolayca ilklendirmemize (initialize) olanak tanır:let page_counts = HashMap::from([ ("Osmanlı Cadısı".to_string(), 336), ("Gri Gökyüzü ".to_string(), 374), ]);
-
-
Alternatif olarak HashMap, anahtar-değer (key-value) demetleri (tuple) üreten herhangi bir
Iterator
’dan oluşturulabilir. -
Bu tür,
std::collections::hash_map::Keys
gibi birkaç “metoda özgü” geri dönüş türüne sahiptir. Bu türler genellikle Rust belgelerindeki aramalarda görünür. Öğrencilere bu türün belgelerini vekeys
metoduna geri dönen yardımcı bağlantıyı gösterin.