Lekcje modułu (1/2)
Kolekcje i HashMap
Kolekcje to struktury danych, które mogą zawierać wiele wartości. W przeciwieństwie do pierwotnych typów tablicowych i krotek, dane, do których odwołują się te kolekcje, są przechowywane na stercie, co oznacza, że ilość danych nie musi być znana w czasie kompilacji i może dynamicznie rosnąć lub zmniejszać się podczas wykonywania programu.
Dwie najczęściej używane kolekcje w Rust to wektory (Vec<T>) i mapy klucz-wartość (HashMap<K, V>).
Wektory (Vec<T>)
Wektory umożliwiają przechowywanie więcej niż jednej wartości tego samego typu w jednej strukturze danych, która umieszcza wszystkie wartości obok siebie w pamięci:
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);
}
Mapa skrótów (HashMap<K, V>)
Kolekcja HashMap<K, V> przechowuje mapowanie kluczy typu K na wartości typu V. Działa poprzez funkcję mieszającą, która określa, w jaki sposób te klucze i wartości są umieszczane w pamięci. Jest to niezwykle przydatne, gdy chcemy wyszukiwać dane nie po indeksie numerycznym, ale po kluczu (na przykład nazwisku lub identyfikatorze).
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."),
}
}
Spróbuj sam
Ćwiczenie 1: Podstawowe operacje na Vec
Zadeklaruj zmienną tablicę liczb całkowitych o nazwie v za pomocą Vec::new(). Dodaj elementy 10, 20 i 30 do wektora sekwencyjnie, używając metody push. Na koniec wydrukuj pierwszy element wektora (indeks 0) za pomocą println!.
Pokaż wskazówkę
Użyj `let mut v = Vec::new();` jako wektora, wstaw elementy za pomocą `v.push(valore)` i wprowadź za pomocą `v[0]`.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 2: Punktacja za pomocą HashMap
Importuj std::collections::HashMap. Zasadniczo zadeklaruj zmienną HashMap o nazwie scores do przechowywania kluczy String i wartości i32. Wprowadź wynik 50 dla użytkownika „Alice”. Bezpiecznie wyodrębnij wynik za pomocą metod get i unwrap(), aby go wydrukować.
Pokaż wskazówkę
Nie zapomnij `use std::collections::HashMap;`. Wstaw za pomocą `scores.insert(String::from("Alice"), 50);` i pobierz wartość za pomocą `.get("Alice").unwrap()`.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 3: Podwajanie wartości w wektorze
Zdefiniuj funkcję o nazwie double_values, która przyjmuje jako dane wejściowe odwołanie do wektora liczb całkowitych &[i32] i zwraca nowy wektor Vec<i32> zawierający te same elementy pomnożone przez 2.
Pokaż wskazówkę
Funkcja musi przewinąć elementy plasterka i wstawić je pomnożone przez 2 do nowego wektora, aby powrócić.
Rozwiązanie dostępne po 3 próbach