Menu
Coddy logo textTech

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.

challenge icon

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::collections içerisinden HashMap yapısını içe aktarın
  • HashMap<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 i32 tü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 &map ile gezinmek için bir for dö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)

Çı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
    
}
quiz iconKendini test et

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