CodeBlanks Logo Icon CodeBlanks

HashMap

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"));   // None

get 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

main.rs
use std::collections::HashMap;

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
let n = stok.____("elma");   // Option<&i32>
Cevap
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)

Orta seviye bölümündeki tüm dersler