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