Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 1 von 213/14 im Kurs~12 min
Lektionen des Moduls (1/2)

Kollektionen und HashMap

Sammlungen sind Datenstrukturen, die mehrere Werte enthalten können. Im Gegensatz zu den primitiven Array- und Tupeltypen werden die von diesen Sammlungen referenzierten Daten im Heap gespeichert, was bedeutet, dass die Datenmenge zum Zeitpunkt der Kompilierung nicht bekannt sein muss und während der Programmausführung dynamisch wachsen oder schrumpfen kann.

Die beiden am häufigsten verwendeten Sammlungen in Rust sind Vektoren (Vec<T>) und Schlüssel-Wert-Maps (HashMap<K, V>).


Vektoren (Vec<T>)

Mit Vektoren können Sie mehr als einen Wert desselben Typs in einer einzigen Datenstruktur speichern, die alle Werte nebeneinander im Speicher ablegt:

Code
fn main() {
    // Creazione di un vettore vuoto mutabile
    let mut v: Vec<i32> = Vec::new();

    // Oppure usando la macro vec!
    let mut v2 = vec![1, 2, 3];

    // Aggiunta di elementi
    v.push(5);
    v.push(6);

    // Accesso agli elementi per indice
    let third = v2[2];
    println!("Il terzo elemento è: {}", third);
}

HashMap (HashMap<K, V>)

Die HashMap<K, V>-Sammlung speichert eine Zuordnung von Schlüsseln vom Typ K zu Werten vom Typ V. Es funktioniert über eine Hashing-Funktion, die bestimmt, wie diese Schlüssel und Werte im Speicher abgelegt werden. Dies ist äußerst nützlich, wenn Sie Daten nicht nach einem numerischen Index, sondern nach einem Schlüssel (z. B. einem Namen oder einer ID) durchsuchen möchten.

Code
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    // Inserimento chiave-valore
    scores.insert(String::from("Blu"), 10);
    scores.insert(String::from("Giallo"), 50);

    // Lettura di un valore (ritorna un Option<&V>)
    let team_name = String::from("Blu");
    let score = scores.get(&team_name);

    match score {
        Some(val) => println!("Punteggio: {}", val),
        None => println!("Nessun punteggio trovato."),
    }
}

Probieren Sie es selbst aus

Übung 1: Grundlegende Operationen auf Vec

Übung#rust.m7.l1.e1
Versuche: 0Wird geladen…

Deklarieren Sie mit Vec::new() ein veränderbares Array von Ganzzahlen namens v. Fügen Sie mithilfe der Push-Methode nacheinander die Elemente 10, 20 und 30 zum Vektor hinzu. Drucken Sie abschließend das erste Element des Vektors (Index 0) mit println!.

Editor wird geladen…
Hinweis anzeigen

Verwenden Sie `let mut v = Vec::new();` für den Vektor, fügen Sie die Elemente mit `v.push(valore)` ein und geben Sie mit `v[0]` ein.

Lösung nach 3 Versuchen verfügbar

Übung 2: Scoring mit HashMap

Übung#rust.m7.l1.e2
Versuche: 0Wird geladen…

Importieren Sie std::collections::HashMap. Deklarieren Sie im Wesentlichen eine veränderbare HashMap namens „scores“, um String-Schlüssel und i32-Werte zu speichern. Geben Sie für den Benutzer „Alice“ eine Punktzahl von 50 ein. Extrahieren Sie die Partitur sicher mit der Methode get und unwrap(), um sie auszudrucken.

Editor wird geladen…
Hinweis anzeigen

Vergessen Sie nicht `use std::collections::HashMap;`. Mit `scores.insert(String::from("Alice"), 50);` einfügen und den Wert mit `.get("Alice").unwrap()` abrufen.

Lösung nach 3 Versuchen verfügbar

Übung 3: Verdoppelung der Werte in einem Vektor

Übung#rust.m7.l1.e3
Versuche: 0Wird geladen…

Definieren Sie eine Funktion namens double_values ​​​​, die als Eingabe einen Verweis auf einen Vektor aus ganzen Zahlen &[i32] verwendet und einen neuen Vektor Vec<i32> zurückgibt, der dieselben Elemente multipliziert mit 2 enthält.

Editor wird geladen…
Hinweis anzeigen

Die Funktion muss durch die Elemente des Slice scrollen und sie multipliziert mit 2 in den neuen Vektor einfügen, um zurückzukehren.

Lösung nach 3 Versuchen verfügbar