Iterieren über eine Hash Map
Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 31 von 66.
Manchmal musst du jedes Schlüssel-Wert-Paar in deiner hash map untersuchen, anstatt nach bestimmten Schlüsseln zu suchen. Rust bietet eine einfache Möglichkeit, alle Daten mithilfe einer for-Schleife zu durchlaufen:
for (key, value) in &my_map {
println!("{}: {}", key, value);
}Beachte das & vor my_map – dadurch wird eine Referenz auf die Hash-Map erstellt, sodass du iterieren kannst, ohne den Besitz zu übernehmen. Die Schleife liefert dir jedes Schlüssel-Wert-Paar als Tupel, das du direkt in der Schleifendeklaration destrukturieren kannst.
Hier ist ein praktisches Beispiel mit einer Preisliste:
let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);
for (item, price) in &prices {
println!("{} costs ${:.2}", item, price);
}Es gibt ein wichtiges Detail, das du dir merken solltest: Hash-Maps garantieren keine bestimmte Iterationsreihenfolge. Die Paare können bei jedem Ausführen deines Programms in einer anderen Reihenfolge ausgegeben werden. Das liegt daran, dass Hash-Maps schnelle Suchvorgänge höher priorisieren als die Beibehaltung der Einfügereihenfolge. Verlass dich daher beim Iterieren nicht darauf, dass die Elemente in einer bestimmten Reihenfolge erscheinen.
Aufgabe
EinfachDu erhältst eine ganze Zahl n, die die Anzahl der zu verarbeitenden Schüler-Leistungs-Paare angibt. Anschließend erhältst du n Eingabepaare: einen Schülernamen, gefolgt von dessen Testergebnis (als ganze Zahl). Erstelle eine Hash-Map, um die Schülernamen als Schlüssel und ihre Ergebnisse als Werte zu speichern. Nachdem du alle Paare eingefügt hast, durchlaufe die Hash-Map und gib den Namen und das Ergebnis jedes Schülers aus.
Anforderungen:
- Importiere
HashMapausstd::collections - Erstelle eine veränderliche Hash-Map mit den Typen
HashMap<String, i32> - Lies die erste Eingabe ein und konvertiere sie in
i32, um die Anzahl der Paare zu erhalten - Verwende eine Schleife, um
nEingabepaare einzulesen (Schülername, dann Ergebnis) - Füge jeden Schülernamen und sein Ergebnis in die Hash-Map ein
- Verwende eine
for-Schleife, um die Hash-Map mit&mapzu durchlaufen - Gib die Informationen jedes Schülers im Format
[name]: [score]aus - Gib die Paare in beliebiger Reihenfolge aus (Hash-Maps garantieren keine Reihenfolge)
Eingabe:
- Erste Zeile: Eine ganze Zahl
n(z. B.3) - Die nächsten
nZeilenpaare:- Schülername (z. B.
Alice) - Testergebnis als ganze Zahl (z. B.
95)
- Schülername (z. B.
Ausgabe:
- Eine Zeile für jeden Schüler im Format:
[name]: [score] - Die Reihenfolge der Ausgabezeilen kann zwischen Testläufen variieren
Probier es selbst
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Lese die Anzahl der Schüler-Punkte-Paare
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Erstelle eine veränderbare HashMap, um Schülernamen und Punktzahlen zu speichern
let mut students: HashMap<String, i32> = HashMap::new();
// TODO: Schreibe deinen Code darunter
// Lese n Eingabepaare (Schülername und Punktzahl) und füge sie in die HashMap ein
// TODO: Iteriere über die HashMap und gib Name und Punktzahl jedes Schülers aus
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
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Übe selbstständig: Online-Rust-Compiler