Bir Hash Map Üzerinde Gezinme
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 31 / 66.
Bazen belirli anahtarları aramak yerine, hash map'inizdeki her anahtar-değer çiftini incelemeniz gerekir. Rust, bir for döngüsü kullanarak tüm veriler arasında döngü kurmanın basit bir yolunu sunar:
for (key, value) in &my_map {
println!("{}: {}", key, value);
}my_map öncesindeki & işaretine dikkat edin - bu, hash map'e bir referans oluşturur, böylece sahipliği (ownership) almadan yineleme yapabilirsiniz. Döngü, size her anahtar-değer çiftini, doğrudan döngü bildiriminde ayrıştırabileceğiniz (destructure) bir demet (tuple) olarak verir.
İşte bir fiyat listesi içeren pratik bir örnek:
let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);
for (item, price) in &prices {
println!("{} costs ${:.2}", item, price);
}Hatırlanması gereken önemli bir detay var: hash map'ler belirli bir yineleme sırasını garanti etmez. Programınızı her çalıştırdığınızda çiftler farklı bir sırayla gelebilir. Bunun nedeni, hash map'lerin ekleme sırasını korumak yerine hızlı aramaya öncelik vermesidir; bu nedenle yineleme yaparken öğelerin belirli bir sırayla görünmesine güvenmeyin.
Görev
Kolayİşlenecek öğrenci-puan çiftlerinin sayısını belirten bir n tam sayısı alacaksınız. Ardından n çift girdi alacaksınız: bir öğrenci adı ve ardından test puanı (tam sayı olarak). Öğrenci adlarını anahtar (key) ve puanlarını değer (value) olarak saklamak için bir hash map oluşturun. Tüm çiftleri ekledikten sonra, hash map üzerinde döngü kurun ve her öğrencinin adını ve puanını yazdırın.
Gereksinimler:
std::collectionsiçerisindenHashMapyapısını içe aktarınHashMap<String, i32>türlerinde değiştirilebilir (mutable) bir hash map oluşturun- İlk girdiyi okuyun ve çift sayısını elde etmek için
i32türüne dönüştürün nçift girdiyi (öğrenci adı, ardından puan) okumak için bir döngü kullanın- Her öğrenci adını ve puanını hash map'e ekleyin
- Hash map üzerinde
&mapile gezinmek için birfordöngüsü kullanın - Her öğrencinin bilgisini şu formatta yazdırın:
[name]: [score] - Çiftleri herhangi bir sırayla yazdırın (hash map'ler sıralama garantisi vermez)
Girdi:
- İlk satır: Bir tam sayı
n(örneğin,3) - Sonraki
nçift satır:- Öğrenci adı (örneğin,
Alice) - Tam sayı olarak test puanı (örneğin,
95)
- Öğrenci adı (örneğin,
Çıktı:
- Her öğrenci için şu formatta bir satır:
[name]: [score] - Çıktı satırlarının sırası test çalışmaları arasında farklılık gösterebilir
Kopya kağıdı
Bir hash map'teki tüm anahtar-değer çiftleri üzerinde yineleme yapmak için, map'e bir referansla birlikte for döngüsü kullanın:
for (key, value) in &my_map {
println!("{}: {}", key, value);
}Hash map'in önündeki & işareti bir referans oluşturarak sahipliği (ownership) almadan yineleme yapılmasına olanak tanır. Döngü, her anahtar-değer çiftini bir demet (tuple) olarak ayrıştırır.
Bir hash map ile örnek:
let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);
for (item, price) in &prices {
println!("{} costs ${:.2}", item, price);
}Önemli: Hash map'ler belirli bir yineleme sırasını garanti etmez. Hash map'ler ekleme sırasını korumak yerine hızlı aramalara öncelik verdiği için, programınızı her çalıştırdığınızda çiftler farklı dizilerde görünebilir.
Kendin dene
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Öğrenci-puan çiftlerinin sayısını oku
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Öğrenci isimlerini ve puanlarını saklamak için değiştirilebilir bir hash map oluştur
let mut students: HashMap<String, i32> = HashMap::new();
// TODO: Kodunuzu aşağıya yazın
// n adet girdi çiftini (öğrenci adı ve puanı) oku ve bunları hash map'e ekle
// TODO: Hash map üzerinde döngü kurun ve her öğrencinin adını ve puanını yazdırın
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi Bulma