Menu
Coddy logo textTech

Bir Hash Map Üzerinde Gezinme

Coddy'nin Rust Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 31 / 66.

Bazen belirli key değerlerine bakmak yerine hash map'inizdeki her key-value çiftini incelemeniz gerekir. Rust, bir for döngüsü kullanarak tüm veriler üzerinde döngü oluşturmanın basit bir yolunu sunar:

for (key, value) in &my_map {
    println!("{}: {}", key, value);
}

my_map öncesindeki & işaretine dikkat et - bu, sahipliği devralmadan üzerinde yineleme yapabilmen için hash map'e bir başvuru oluşturur. Döngü, her anahtar-değer çiftini, döngü bildiriminde doğrudan yapısını bozabileceğin bir demet olarak verir.

İşte fiyat listesiyle 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ırlaman gereken önemli bir ayrıntı var: hash map'leri belirli bir yineleme sırasını garanti etmez. Programını her çalıştırdığında çiftler farklı bir sırayla gelebilir. Bunun nedeni, hash map'lerinin ekleme sırasını korumak yerine hızlı aramaya öncelik vermesidir; bu nedenle yineleme yaptığında öğelerin belirli bir sırada görünmesine güvenme.

challenge icon

Görev

Kolay

İşlenecek öğrenci-puan çiftlerinin sayısını belirten bir tamsayı n alacaksınız. Ardından n adet girdi çifti alacaksınız: önce öğrenci adı, sonra test puanı (tamsayı olarak). Öğrenci adlarını anahtar, puanlarını değer olarak depolamak için bir hash map oluşturun. Tüm çiftleri ekledikten sonra hash map üzerinde yineleyin ve her öğrencinin adını ve puanını yazdırın.

Gereksinimler:

  • HashMap öğesini std::collections içinden içe aktarın
  • HashMap<String, i32> türleriyle değiştirilebilir bir hash map oluşturun
  • İlk girdiyi okuyun ve çiftlerin sayısını elde etmek için i32 türüne dönüştürün
  • n adet girdi çiftini (öğrenci adı, ardından puan) okumak için bir döngü kullanın
  • Her öğrenci adını ve puanını hash map'e ekleyin
  • &map ile hash map üzerinde yinelemek için bir for döngüsü kullanın
  • Her öğrencinin bilgilerini şu biçimde yazdırın: [name]: [score]
  • Çiftleri herhangi bir sırada yazdırın (hash map'ler sıra garantisi vermez)

Girdi:

  • İlk satır: Bir tamsayı n (örneğin, 3)
  • Sonraki n satır çifti:
    • Öğrenci adı (örneğin, Alice)
    • Tamsayı olarak test puanı (örneğin, 95)

Çıktı:

  • Her öğrenci için şu biçimde bir satır: [name]: [score]
  • Çıktı satırlarının sırası farklı test çalıştırmaları arasında değişebilir

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 adlarını ve puanlarını saklamak için değiştirilebilir bir hash map oluştur
    let mut students: HashMap<String, i32> = HashMap::new();
    
    // TODO: Kodunu aşağıya yaz
    // n girdi çiftini (öğrenci adı ve puan) oku ve bunları hash map'e ekle
    
    
    
    // TODO: Hash map üzerinde dolaş ve her öğrencinin adını ve puanını yazdır
    
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi