Salt la conținutul principal
Modulul 7 · Lecția 1 din 213/14 în curs~12 min
Lecții din modul (1/2)

Colecții și HashMap

Colecțiile sunt structuri de date capabile să dețină mai multe valori. Spre deosebire de matricele primitive și de tipurile de tuplu, datele la care se referă aceste colecții sunt stocate în heap, ceea ce înseamnă că cantitatea de date nu trebuie să fie cunoscută în timpul compilării și poate crește sau micșora dinamic în timpul execuției programului.

Cele două colecții cel mai frecvent utilizate în Rust sunt vectori (Vec<T>) și hărți cheie-valoare (HashMap<K, V>).


Vectori (Vec<T>)

Vectorii vă permit să stocați mai mult de o valoare de același tip într-o singură structură de date care pune toate valorile una lângă alta în memorie:

Rust
fn main() {
    // Creating an empty mutable vector
    let mut v: Vec<i32> = Vec::new();

    // Or using the vec! macro
    let mut v2 = vec![1, 2, 3];

    // Appending elements
    v.push(5);
    v.push(6);

    // Accessing elements by index
    let third = v2[2];
    println!("The third element is: {}", third);
}

HashMap (HashMap<K, V>)

Colecția HashMap<K, V> stochează o mapare a cheilor de tip K la valori de tip V. Funcționează printr-o funcție de hashing, care determină modul în care aceste chei și valori sunt plasate în memorie. Este extrem de util atunci când doriți să căutați date nu după un index numeric, ci după o cheie (cum ar fi un nume sau un ID).

Rust
use std::collections::HashMap;

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

    // Inserting key-value pair
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // Reading a value (returns an Option<&V>)
    let team_name = String::from("Blue");
    let score = scores.get(&team_name);

    match score {
        Some(val) => println!("Score: {}", val),
        None => println!("No score found."),
    }
}

Încercați-l singur

Exercițiul 1: Operații de bază pe Vec

Exercițiu#rust.m7.l1.e1
Încercări: 0Se încarcă…

Declarați un vector întreg mutabil numit v folosind Vec::new(). Adăugați elementele 10, 20 și 30 în secvență folosind metoda push. În cele din urmă, imprimați primul element al vectorului (index 0) folosind println!.

Se încarcă editorul...
Afișează indiciu

Folosiți `let mut v = Vec::new();` pentru a inițializa vectorul, inserați elemente cu `v.push(value)` și accesați cu `v[0]`.

Soluție disponibilă după 3 încercări

Exercițiul 2: Scorurile utilizatorilor cu HashMap

Exercițiu#rust.m7.l1.e2
Încercări: 0Se încarcă…

Import std::collections::HashMap. În funcția principală, declarați un HashMap mutabil numit scoruri pentru a stoca cheile String și valorile i32. Introduceți un scor de 50 pentru utilizatorul „Alice”. Extrageți în siguranță scorul folosind metoda get și unwrap() pentru a-l imprima.

Se încarcă editorul...
Afișează indiciu

Nu uitați `utilizați std::collections::HashMap;`. Inserați cu `scores.insert(String::from("Alice"), 50);`și preluați valoarea cu`.get("Alice").unwrap()`.

Soluție disponibilă după 3 încercări

Exercițiul 3: Dublarea valorilor într-un vector

Exercițiu#rust.m7.l1.e3
Încercări: 0Se încarcă…

Definiți o funcție numită double_values ​​care acceptă o referință la o felie de numere întregi &[i32] și returnează un nou Vec<i32> care conține aceleași elemente înmulțite cu 2.

Se încarcă editorul...
Afișează indiciu

Funcția ar trebui să itereze peste elementele feliei și să le insereze înmulțit cu 2 în noul vector care urmează să fie returnat.

Soluție disponibilă după 3 încercări