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.
Aufgabe
EinfachSie 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
HashMapausstd::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
nPaare 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ückgegebenenOption-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
nZeilenpaare:- Artikelname (z. B.
apples) - Menge als Ganzzahl (z. B.
50)
- Artikelname (z. B.
- 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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code