Menu
Coddy logo textTech

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).

challenge icon

Aufgabe

Einfach

Du 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 HashMap aus std::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 n Spielernamen zu lesen
  • Verwende für jeden Spielernamen .entry(name).or_insert(100), um ihn mit einer Punktzahl von 100 hinzuzufü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 n Zeilen: 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
    
}
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 Logik & Kontrollfluss

Übe selbstständig: Online-Rust-Compiler