Menu
Coddy logo textTech

Entfernen eines Paares

Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 33 von 66.

Manchmal müssen Sie Daten vollständig aus Ihrer Hash-Map entfernen. Rust bietet die .remove()-Methode an, um ein Schlüssel-Wert-Paar durch Angabe des Schlüssels zu löschen:

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

// Den Eintrag "apples" vollständig entfernen
inventory.remove("apples");

Die .remove()-Methode nimmt den Schlüssel als Parameter entgegen und entfernt sowohl den Schlüssel als auch den zugehörigen Wert aus der Hash-Map. Nach dem Aufruf von .remove("apples") würde der Versuch, nach „apples“ zu suchen, None zurückgeben.

Wie viele Hash-Map-Operationen gibt .remove() ein Option zurück. Es gibt Some(value) zurück, das den entfernten Wert enthält, falls der Schlüssel existierte, oder None, falls der Schlüssel nicht gefunden wurde:

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

Dieser Rückgabewert lässt Sie wissen, ob das Entfernen erfolgreich war und gibt Ihnen Zugriff auf den Wert, der entfernt wurde, was für Protokollierungs- oder Bereinigungsoperationen nützlich sein kann.

challenge icon

Aufgabe

Einfach

Sie erhalten eine Ganzzahl n, die die Anzahl der Artikel in einem Inventar angibt. Dann erhalten Sie n Paare von Eingaben: einen Artikelnamen gefolgt von seiner Menge (als Ganzzahl). Danach erhalten Sie eine weitere Eingabe mit einem Artikelnamen, der aus dem Inventar entfernt werden soll. Erstellen Sie eine Hash-Map, um das Inventar zu speichern, fügen Sie alle Artikel hinzu, entfernen Sie den angegebenen Artikel und geben Sie das Ergebnis der Entfernung zusammen mit dem verbleibenden Inventar aus.

Anforderungen:

  • Importieren Sie HashMap aus std::collections
  • Erstellen Sie eine veränderbare Hash-Map mit den Typen HashMap<String, i32>
  • Lesen Sie die erste Eingabe ein und konvertieren Sie diese in i32, um die Anzahl der Artikel zu erhalten
  • Verwenden Sie eine Schleife, um n Paare von Eingaben zu lesen (Artikelname, dann Menge)
  • Fügen Sie jeden Artikel und seine Menge in die Hash-Map ein
  • Lesen Sie eine weitere Eingabe als den zu entfernenden Artikelnamen ein
  • Verwenden Sie .remove(), um den Artikel aus der Hash-Map zu entfernen
  • Verwenden Sie match, um mit dem von .remove() zurückgegebenen Option-Typ umzugehen
  • Wenn der Artikel gefunden und entfernt wurde, geben Sie Folgendes aus: Removed [quantity] [item_name]
  • Wenn der Artikel nicht gefunden wurde, geben Sie Folgendes aus: [item_name] not found
  • Nachdem die Entfernung verarbeitet wurde, iterieren Sie über die verbleibende Hash-Map und geben Sie jeden Artikel im Format [item_name]: [quantity] aus

Eingabe:

  • Erste Zeile: Eine Ganzzahl n (z. B. 3)
  • Nächste n Zeilenpaare:
    • Artikelname (z. B. apples)
    • Menge als Ganzzahl (z. B. 50)
  • Letzte Zeile: Zu entfernender Artikelname (z. B. bananas)

Ausgabe:

  • Erste Zeile: Entweder Removed [quantity] [item_name] oder [item_name] not found
  • Folgende Zeilen: Eine Zeile für jeden verbleibenden Artikel im Format: [item_name]: [quantity]
  • Die Reihenfolge der verbleibenden Artikel kann zwischen den Testläufen variieren

Spickzettel

Um ein Schlüssel-Wert-Paar aus einer Hash-Map zu entfernen, verwenden Sie die Methode .remove() mit dem Schlüssel als Parameter:

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

inventory.remove("apples");

Die Methode .remove() gibt ein Option zurück: Some(value), wenn der Schlüssel existierte, oder None, wenn er nicht gefunden wurde:

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

Probier es selbst

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Lies die Anzahl der Artikel
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Erstelle eine veränderbare Hash-Map, um den Bestand zu speichern
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // Lies n Paare von Eingaben (Artikelname und Menge)
    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: Füge den Artikel und die Menge in die Hash-Map ein
    }
    
    // Lies den Namen des zu entfernenden Artikels
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: Entferne den Artikel aus der Hash-Map und behandle das Ergebnis mit match
    // Gib das Ergebnis der Entfernung aus (entweder "Removed [quantity] [item_name]" oder "[item_name] not found")
    
    // TODO: Iteriere über den verbleibenden Bestand und gib jeden Artikel im Format "[item_name]: [quantity]" aus
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow