Przejdź do głównej treści
eLearner.app
Moduł 7 · Lekcja 1 z 213/14 w kursie~12 min
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:

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);
}

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

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."),
    }
}

Spróbuj sam

Ćwiczenie 1: Podstawowe operacje na Vec

Ćwiczenie#rust.m7.l1.e1
Próby: 0Ładowanie...

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

Ładowanie edytora...
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

Ćwiczenie#rust.m7.l1.e2
Próby: 0Ładowanie...

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

Ładowanie edytora...
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

Ćwiczenie#rust.m7.l1.e3
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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