Menu
Coddy logo textTech

Bir Çifti Kaldırma

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

Bazen verileri hash map'inizden tamamen kaldırmanız gerekir. Rust, anahtarı belirterek bir anahtar-değer çiftini silmek için .remove() metodunu sağlar:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

// "apples" girişini tamamen kaldır
inventory.remove("apples");

.remove() yöntemi anahtarı parametre olarak alır ve hem anahtarı hem de onunla ilişkili değeri hash map'ten kaldırır. .remove("apples") çağrıldıktan sonra, "apples" için arama yapmaya çalışmak None döndürür.

Birçok hash map operasyonu gibi, .remove() bir Option döner. Eğer anahtar mevcutsa silinen değeri içeren Some(value), anahtar bulunamadıysa None döner:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

Bu dönüş değeri, çıkarma işleminin başarılı olup olmadığını bilmenizi sağlar ve çıkarılan değere erişmenizi sağlar; bu da günlükleme veya temizleme işlemleri için yararlı olabilir.

challenge icon

Görev

Kolay

Envanterdeki öğelerin sayısını belirten bir tamsayı n alacaksınız. Ardından n çift girdi alacaksınız: bir öğe adı ve ardından miktarı (tamsayı olarak). Bundan sonra, envanterden kaldırılacak öğenin adını içeren bir girdi daha alacaksınız. Envanteri saklamak için bir hash map oluşturun, tüm öğeleri ekleyin, belirtilen öğeyi kaldırın ve kaldırma sonucunu kalan envanterle birlikte yazdırın.

Gereksinimler:

  • HashMap'i std::collections içinden içe aktarın
  • HashMap<String, i32> türünde değiştirilebilir bir hash map oluşturun
  • İlk girdiyi okuyun ve öğe sayısını elde etmek için i32 türüne dönüştürün
  • n çift girdiyi (önce öğe adı, ardından miktar) okumak için bir döngü kullanın
  • Her öğeyi ve miktarını hash map'e ekleyin
  • Kaldırılacak öğenin adı olarak bir girdi daha okuyun
  • Öğeyi hash map'ten kaldırmak için .remove() kullanın
  • .remove() tarafından döndürülen Option'ı işlemek için match kullanın
  • Öğe bulunup kaldırıldıysa şunu yazdırın: Removed [quantity] [item_name]
  • Öğe bulunamadıysa şunu yazdırın: [item_name] not found
  • Kaldırma işlemini gerçekleştirdikten sonra kalan hash map üzerinde yineleyin ve her öğeyi şu biçimde yazdırın: [item_name]: [quantity]

Girdi:

  • İlk satır: Bir tamsayı n (ör. 3)
  • Sonraki n çift satır:
    • Öğe adı (ör. apples)
    • Tamsayı olarak miktar (ör. 50)
  • Son satır: Kaldırılacak öğenin adı (ör. bananas)

Çıktı:

  • İlk satır: Removed [quantity] [item_name] veya [item_name] not found
  • Sonraki satırlar: Kalan her öğe için şu biçimde bir satır: [item_name]: [quantity]
  • Kalan öğelerin sırası farklı test çalıştırmaları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();
    
    // Öğe sayısını oku
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Envanteri saklamak için değiştirilebilir bir hash map oluştur
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // n adet girdi çiftini oku (öğe adı ve miktar)
    for _ in 0..n {
        let item_name = lines.next().unwrap().unwrap().trim().to_string();
        let quantity: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
        
        // TODO: Öğe ve miktarı hash map'e ekle
    }
    
    // Kaldırılacak öğe adını oku
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: Öğeyi hash map'ten kaldır ve sonucu match kullanarak işle
    // Kaldırma sonucunu yazdır (ya "Removed [quantity] [item_name]" ya da "[item_name] not found")
    
    // TODO: Kalan envanter üzerinde döngü kur ve her öğeyi "[item_name]: [quantity]" formatında 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