Einfügen von Schlüssel-Wert-Paaren
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 29 von 66.
Da du nun eine leere Hash-Map hast, ist es an der Zeit, Daten hinzuzufügen. Du kannst Schlüssel-Wert-Paare mit der Methode .insert() in eine Hash-Map einfügen:
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");Die .insert()-Methode nimmt zwei Parameter entgegen: den Schlüssel und den Wert. In diesem Beispiel speichern wir Ländernamen als Schlüssel und ihre Hauptstädte als Werte.
Es gibt ein wichtiges Verhalten zu beachten: Wenn Sie einen Schlüssel einfügen, der bereits in der Hash-Map existiert, überschreibt der neue Wert den alten:
capitals.insert("France", "Lyon"); // Dies überschreibt "Paris"Nach dieser Operation würde das Nachschlagen von "France" "Lyon" anstelle von "Paris" zurückgeben. Dieses Überschreibungsverhalten macht .insert() nützlich, um sowohl neue Einträge hinzuzufügen als auch bestehende in Ihrer Hash-Map zu aktualisieren.
Aufgabe
EinfachSie erhalten drei Eingaben: einen Produktnamen, dessen Preis (als Dezimalzahl) und einen weiteren Produktnamen. Erstellen Sie eine veränderbare Hash-Map, um Produktnamen als Schlüssel (Typ String) und deren Preise als Werte (Typ f64) zu speichern. Fügen Sie das erste Produkt mit seinem Preis in die Hash-Map ein. Fügen Sie dann das zweite Produkt mit einem Preis von 0.0 ein. Aktualisieren Sie schließlich den Preis des zweiten Produkts auf 15.99, indem Sie es erneut mit dem neuen Preis einfügen. Geben Sie alle Informationen in dem unten gezeigten exakten Format aus.
Hinweis zu .clone(): Wenn Sie eine String-Variable als Schlüssel in eine HashMap einfügen, führen die Ownership-Regeln von Rust dazu, dass die Variable in die Map verschoben wird und danach nicht mehr verwendbar ist. Um die Variable weiterhin zu verwenden (z. B. zum Drucken oder erneuten Einfügen), rufen Sie .clone() auf ihr auf, wenn Sie sie an insert() übergeben. Zum Beispiel: map.insert(name.clone(), price).
Anforderungen:
- Importieren Sie
HashMapausstd::collections - Erstellen Sie eine veränderbare Hash-Map mit den Typen
HashMap<String, f64> - Lesen Sie die erste Eingabe als den ersten Produktnamen ein
- Lesen Sie die zweite Eingabe ein und konvertieren Sie diese in
f64für den Preis des ersten Produkts - Fügen Sie das erste Produkt und seinen Preis in die Hash-Map ein, wobei Sie
.clone()auf den Produktnamen anwenden - Lesen Sie die dritte Eingabe als den zweiten Produktnamen ein
- Fügen Sie das zweite Produkt mit einem Preis von
0.0ein, wobei Sie.clone()auf den Produktnamen anwenden - Fügen Sie das zweite Produkt erneut mit einem Preis von
15.99ein, wobei Sie.clone()verwenden (dies wird den vorherigen Wert überschreiben) - Geben Sie die Informationen für beide Produkte im unten gezeigten exakten Format aus
Eingabe:
- Erste Zeile: Erster Produktname (z. B.
Laptop) - Zweite Zeile: Preis des ersten Produkts als Dezimalzahl (z. B.
999.99) - Dritte Zeile: Zweiter Produktname (z. B.
Mouse)
Ausgabe:
- Erste Zeile:
Inserted [first_product] at $[price] - Zweite Zeile:
Inserted [second_product] at $0.00 - Dritte Zeile:
Updated [second_product] to $15.99
Spickzettel
Um Schlüssel-Wert-Paare in eine Hash-Map einzufügen, verwenden Sie die .insert()-Methode:
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");Die .insert()-Methode nimmt zwei Parameter entgegen: den Schlüssel und den Wert.
Wenn Sie einen Schlüssel einfügen, der bereits existiert, überschreibt der neue Wert den alten:
capitals.insert("France", "Lyon"); // Dies überschreibt "Paris"Dieses Überschreibungsverhalten macht .insert() nützlich, um sowohl neue Einträge hinzuzufügen als auch bestehende zu aktualisieren.
Probier es selbst
use std::collections::HashMap;
use std::io;
fn main() {
// Eingaben lesen
let mut product1 = String::new();
io::stdin().read_line(&mut product1).expect("Failed to read line");
let product1 = product1.trim().to_string();
let mut price1_input = String::new();
io::stdin().read_line(&mut price1_input).expect("Failed to read line");
let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
let mut product2 = String::new();
io::stdin().read_line(&mut product2).expect("Failed to read line");
let product2 = product2.trim().to_string();
// TODO: Schreibe deinen Code unten
// Erstelle eine veränderbare HashMap, füge Produkte hinzu und gib die erforderliche Ausgabe 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