Menu
Coddy logo textTech

Zugreifen auf Werte

Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 30 von 66.

Sobald du Daten in deiner HashMap gespeichert hast, benötigst du eine Möglichkeit, sie abzurufen. Mit der Methode .get() kannst du mithilfe ihres Schlüssels nach einem Wert suchen:

let value = my_map.get("some_key");

Es gibt jedoch ein wichtiges Detail, das du verstehen solltest: .get() gibt nicht direkt den Wert zurück. Stattdessen gibt es einen Option-Typ zurück: einen integrierten Rust-Typ, der entweder „etwas“ oder „nichts“ darstellt. Der Grund dafür ist, dass der Schlüssel, nach dem du suchst, in der Hash-Map möglicherweise nicht existiert.

Wenn der Schlüssel existiert, gibt .get() Some(&value) zurück – beachte das Symbol &, das bedeutet, dass du eine Referenz auf den Wert und nicht den Wert selbst erhältst. Wenn der Schlüssel nicht existiert, wird None zurückgegeben:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Dir fällt vielleicht auf, dass der match-Arm Some(capital) ohne ein explizites & verwendet. Das liegt daran, dass Rust in diesem Kontext die Referenz automatisch für dich behandelt: capital enthält weiterhin eine Referenz auf den Wert, aber du musst & im Muster nicht ausdrücklich schreiben. Rusts Pattern Matching ist intelligent genug, damit du capital direkt verwenden kannst, zum Beispiel beim Ausgeben.

Dieses Design verhindert, dass dein Programm abstürzt, wenn du versuchst, auf einen nicht vorhandenen Schlüssel zuzugreifen. Statt einen Fehler zu verursachen, zwingt Rust dich, beide Möglichkeiten zu behandeln – den Wert zu finden oder ihn nicht zu finden –, wodurch dein Code robuster und vorhersehbarer wird.

challenge icon

Aufgabe

Einfach

Du erhältst zwei Eingaben: einen Ländernamen und den Namen einer Hauptstadt. Erstelle eine Hash-Map, die Ländernamen als Schlüssel (Typ String) und ihre Hauptstädte als Werte (Typ String) speichert. Füge das Land und seine Hauptstadt in die Hash-Map ein. Anschließend erhältst du eine dritte Eingabe mit dem Namen eines weiteren Landes, nach dem gesucht werden soll. Verwende die Methode .get(), um die Hauptstadt dieses Landes abzurufen, und behandle beide Fälle: wenn das Land in der Map existiert und wenn es nicht existiert.

Hinweis: .get() gibt ein Option zurück: entweder Some(&value) (eine Referenz auf den Wert), wenn der Schlüssel existiert, oder None, wenn er nicht existiert. In einem match-Arm kannst du Some(capital) schreiben, und Rust behandelt die Referenz automatisch für dich, sodass du capital direkt in deiner Ausgabeanweisung verwenden kannst.

Anforderungen:

  • Importiere HashMap aus std::collections
  • Erstelle eine veränderliche Hash-Map mit den Typen HashMap<String, String>
  • Lies die erste Eingabe als Ländernamen ein
  • Lies die zweite Eingabe als Namen der Hauptstadt ein
  • Füge das Land und die Hauptstadt in die Hash-Map ein
  • Lies die dritte Eingabe als das Land ein, nach dem gesucht werden soll
  • Verwende .get(), um die Hauptstadt des gesuchten Landes abzurufen
  • Verwende match, um das von .get() zurückgegebene Option zu behandeln
  • Wenn das Land gefunden wird, gib aus: The capital of [country] is [capital]
  • Wenn das Land nicht gefunden wird, gib aus: [country] not found in the map

Eingabe:

  • Erste Zeile: Einzufügender Ländername (z. B. France)
  • Zweite Zeile: Name der Hauptstadt (z. B. Paris)
  • Dritte Zeile: Nachzuschlagender Ländername (z. B. France oder Germany)

Ausgabe:

  • Wenn das gesuchte Land existiert: The capital of [country] is [capital]
  • Wenn das gesuchte Land nicht existiert: [country] not found in the map

Probier es selbst

use std::collections::HashMap;
use std::io;

fn main() {
    // Lies den Ländernamen zum Einfügen
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // Lies den Namen der Hauptstadt
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // Lies den Ländernamen zum Nachschlagen
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: Schreibe deinen Code darunter
    // Erstelle eine HashMap, füge das Land und die Hauptstadt ein und schlage dann das Land nach
    
}
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