Menu
Coddy logo textTech

Bir Çifti Kaldırma

Coddy'nin Rust Journey'sinin Logic & Flow 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ı bir 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" anahtarını aramaya çalışmak None döndürecektir.

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

Bir envanterdeki öğe sayısını belirten bir n tam sayısı alacaksınız. Ardından n çift girdi alacaksınız: bir öğe adı ve ardından miktarı (tam sayı olarak). Bundan sonra, envanterden çıkarılacak bir öğe 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 çıkarın ve çıkarma sonucunu kalan envanterle birlikte yazdırın.

Gereksinimler:

  • std::collections modülünden 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 öğe sayısını almak için i32 türüne dönüştürün
  • n çift girdiyi (öğe adı, ardından miktar) okumak için bir döngü kullanın
  • Her öğeyi ve miktarını hash map'e ekleyin
  • Çıkarılacak öğe adı olarak bir girdi daha okuyun
  • Öğeyi hash map'ten çıkarmak için .remove() metodunu kullanın
  • .remove() tarafından döndürülen Option değerini işlemek için match kullanın
  • Eğer öğe bulunduysa ve çıkarıldıysa, şunu yazdırın: Removed [quantity] [item_name]
  • Eğer öğe bulunamadıysa, şunu yazdırın: [item_name] not found
  • Çıkarma işlemini işledikten sonra, kalan hash map üzerinde döngü kurun ve her öğeyi şu formatta yazdırın: [item_name]: [quantity]

Girdi:

  • İlk satır: Bir tam sayı n (örneğin, 3)
  • Sonraki n satır çifti:
    • Öğe adı (örneğin, apples)
    • Tam sayı olarak miktar (örneğin, 50)
  • Son satır: Çıkarılacak öğe adı (örneğin, bananas)

Çıktı:

  • İlk satır: Ya Removed [quantity] [item_name] ya da [item_name] not found
  • Takip eden satırlar: Kalan her öğe için şu formatta bir satır: [item_name]: [quantity]
  • Kalan öğelerin sırası test çalıştırmaları arasında farklılık gösterebilir

Kopya kağıdı

Bir hash map'ten bir anahtar-değer çiftini kaldırmak için, anahtarı parametre olarak alan .remove() metodunu kullanın:

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

inventory.remove("apples");

.remove() metodu bir Option döndürür: anahtar mevcutsa Some(value), 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"),
}

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.

Logic & Flow bölümündeki tüm dersler