Aktualisieren eines Wertes
Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 32 von 66.
Manchmal müssen Sie Werte in einer Hash-Map auf unterschiedliche Weise aktualisieren. Sie haben bereits gelernt, dass .insert() einen vorhandenen Wert überschreibt, aber was ist, wenn Sie einen Wert nur hinzufügen möchten, wenn der Schlüssel noch nicht existiert?
Rust bietet die .entry() API für anspruchsvollere Wertaktualisierungen. Die nützlichste Methode in dieser API ist .or_insert(), die nur dann einen Wert einfügt, wenn der Schlüssel noch nicht vorhanden ist:
let mut scores = HashMap::new();
scores.insert("Alice", 85);
// Dies wird Alices Punktzahl NICHT überschreiben
scores.entry("Alice").or_insert(90);
// Dies WIRD Bobs Punktzahl hinzufügen, da er nicht in der Map ist
scores.entry("Bob").or_insert(90);Die Methode .entry() gibt ein Entry-Enum zurück, das entweder eine belegte oder eine freie Stelle in der Hash-Map darstellt. Wenn Sie .or_insert() darauf aufrufen, wird der neue Wert nur eingefügt, wenn der Eintrag leer ist (der Schlüssel existiert nicht).
Aufgabe
EinfachDu erhältst eine Ganzzahl n, die angibt, wie viele Spielernamen verarbeitet werden sollen. Anschließend erhältst du n Spielernamen als Eingaben. Erstelle eine Hash-Map, um die Punktzahlen der Spieler zu verfolgen (Typ HashMap<String, i32>). Verwende für jeden erhaltenen Spielernamen .entry() mit .or_insert(), um ihn nur dann mit einer anfänglichen Punktzahl von 100 zur Map hinzuzufügen, wenn er noch nicht vorhanden ist. Nachdem alle Namen verarbeitet wurden, gib jeden Spieler und seine Punktzahl aus.
Anforderungen:
- Importiere
HashMapausstd::collections - Erstelle eine veränderbare Hash-Map mit den Typen
HashMap<String, i32> - Lies die erste Eingabe und konvertiere sie in
i32, um die Anzahl der Spielernamen zu erhalten - Verwende eine Schleife, um
nSpielernamen zu lesen - Verwende für jeden Spielernamen
.entry(name).or_insert(100), um ihn mit einer Punktzahl von100hinzuzufügen, falls er noch nicht in der Map vorhanden ist - Nachdem alle Namen verarbeitet wurden, durchlaufe die Hash-Map und gib die Informationen zu jedem Spieler im Format
[name]: [score]aus
Eingabe:
- Erste Zeile: Eine Ganzzahl
n(z. B.5) - Die nächsten
nZeilen: Spielernamen (z. B.Alice,Bob,Alice,Charlie,Bob)
Ausgabe:
- Eine Zeile für jeden eindeutigen Spieler 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();
// Lies die Anzahl der Spielernamen
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Erstelle eine veränderbare HashMap, um die Spielergebnisse zu speichern
let mut player_scores: HashMap<String, i32> = HashMap::new();
// TODO: Schreibe deinen Code unten
// Lies n Spielernamen und verwende .entry().or_insert(100), um sie der Map hinzuzufügen
// Gib jeden Spieler und sein Ergebnis im Format: [Name]: [Ergebnis] 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