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:
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.
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
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!.
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
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.
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
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.
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