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.
Görev
KolayBir 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::collectionsmodülündenHashMapyapısını içe aktarınHashMap<String, i32>türlerinde değiştirilebilir (mutable) bir hash map oluşturun- İlk girdiyi okuyun ve öğe sayısını almak için
i32tü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ülenOptiondeğerini işlemek içinmatchkullanı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
nsatır çifti:- Öğe adı (örneğin,
apples) - Tam sayı olarak miktar (örneğin,
50)
- Öğe adı (örneğin,
- 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
}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