HashMap
- Rust kursu
- Orta seviye
- Ders 54/115
- 4 dk
HashMap<K, V> kullanmayı ve anahtar-değer saklamayı öğrenirsin.
HashMap
HashMap<K, V>, anahtarları değerlere eşleyen ve aramayı ortalama O(1)'de yapan bir tablodur. Anahtar türü Eq + Hash olmalıdır:
use std::collections::HashMap;
let mut stok = HashMap::new();
stok.insert("elma", 10);
stok.insert("armut", 4);
stok.insert("elma", 12); // üzerine yazar
println!("{:?}", stok.get("elma")); // Some(12)
println!("{:?}", stok.get("kivi")); // Noneget bulunamama ihtimali yüzünden Option<&V> döndürür. stok["elma"] da yazılabilir ama anahtar yoksa panic verir.
Sahiplik ve silme
insert anahtar ve değerin sahipliğini alır; String anahtarlar haritaya taşınır. remove değeri geri verir, contains_key varlığı denetler:
let mut renk: HashMap<String, u8> = HashMap::new();
let ad = String::from("kırmızı");
renk.insert(ad, 1); // ad taşındı
println!("{}", renk.contains_key("kırmızı")); // true: &str ile aranabilir
println!("{:?}", renk.remove("kırmızı")); // Some(1)String anahtarlı haritada &str ile arama yapılabilir, çünkü String: Borrow<str>.
Uygulama Stok tablosu
HashMap'e ("elma", 10), ("armut", 4) ve tekrar ("elma", 12) ekle. get("elma"), get("kivi") ve len() sonuçlarını tek satırda yazdır.
Başlangıç kodu
use std::collections::HashMap;
fn main() {
// buraya yaz
}Örnek çözüm
use std::collections::HashMap;
fn main() {
let mut stok = HashMap::new();
stok.insert("elma", 10);
stok.insert("armut", 4);
stok.insert("elma", 12);
println!("{:?} {:?} {}", stok.get("elma"), stok.get("kivi"), stok.len());
}Beklenen çıktı
Some(12) None 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 HashMap'i <code>for</code> ile dolaşınca anahtarlar hangi sırayla gelir?
- Değerlere göre
- Belirsiz; her çalıştırmada farklı olabilir Doğru cevap
- Ekleme sırasıyla
- Alfabetik
Açıklama: Rust, saldırılara karşı her süreçte rastgele tohumlu bir hash kullanır. Sıra gerekiyorsa BTreeMap ya da sıralanmış bir Vec kullan.
2 Güvenli okuma
let n = stok.____("elma"); // Option<&i32>
let n = stok.get("elma"); // Option<&i32>
Açıklama: get anahtar yoksa None döndürür.
3 İşlem ve sonuç
| Kavram | Anlamı |
|---|---|
insert("elma", 12) (vardı) |
Some(eski değer) |
get("kivi") |
None |
stok["kivi"] |
Panic |
remove("armut") |
Some(4) |