Leçons du module (1/2)
Collections et HashMap
Les collections sont des structures de données capables de contenir plusieurs valeurs. Contrairement aux types primitifs de tableau et de tuple, les données référencées par ces collections sont stockées dans le heap, ce qui signifie que la quantité de données n'a pas besoin d'être connue au moment de la compilation et peut augmenter ou diminuer de manière dynamique pendant l'exécution du programme.
Les deux collections les plus utilisées dans Rust sont les vecteurs (Vec<T>) et les cartes clé-valeur (HashMap<K, V>).
Vecteurs (Vec<T>)
Les vecteurs vous permettent de stocker plusieurs valeurs du même type dans une seule structure de données qui place toutes les valeurs les unes à côté des autres en mémoire :
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>)
La collection HashMap<K, V> stocke un mappage de clés de type K vers des valeurs de type V. Il fonctionne via une fonction de hachage, qui détermine comment ces clés et valeurs sont placées en mémoire. C'est extrêmement utile lorsque vous souhaitez rechercher des données non pas par un index numérique, mais par une clé (par exemple, un nom ou un identifiant).
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."),
}
}
Essayez-le vous-même
Exercice 1 : Opérations de base sur Vec
Déclarez un tableau mutable d'entiers appelé v en utilisant Vec::new(). Ajoutez les éléments 10, 20 et 30 au vecteur séquentiellement à l'aide de la méthode push. Enfin, imprimez le premier élément du vecteur (index 0) en utilisant println!.
Afficher l'indice
Utilisez `let mut v = Vec::new();` pour le vecteur, insérez les éléments avec `v.push(valore)` et entrez avec `v[0]`.
Solution disponible après 3 tentatives
Exercice 2 : Scoring avec HashMap
Importez std :: collections :: HashMap. En principal, déclarez un HashMap mutable appelé scores pour stocker les clés String et les valeurs i32. Entrez un score de 50 pour l'utilisateur « Alice ». Extrayez la partition en toute sécurité à l'aide de la méthode get et unwrap() pour l'imprimer.
Afficher l'indice
N'oubliez pas `use std::collections::HashMap;`. Insérez avec `scores.insert(String::from("Alice"), 50);`et récupérez la valeur avec`.get("Alice").unwrap()`.
Solution disponible après 3 tentatives
Exercice 3 : Doubler les valeurs dans un vecteur
Définissez une fonction appelée double_values qui prend en entrée une référence à un vecteur d'entiers &[i32] et renvoie un nouveau vecteur Vec<i32> contenant les mêmes éléments multipliés par 2.
Afficher l'indice
La fonction doit faire défiler les éléments de la tranche et les insérer multipliés par 2 dans le nouveau vecteur à retourner.
Solution disponible après 3 tentatives