Passer au contenu principal
eLearner.app
Module 7 · Leçon 1 sur 213/14 dans le cours~12 min
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 :

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

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

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

Essayez-le vous-même

Exercice 1 : Opérations de base sur Vec

Exercice#rust.m7.l1.e1
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
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

Exercice#rust.m7.l1.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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

Exercice#rust.m7.l1.e3
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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