Menu
Coddy logo textTech

Parcourir une Hash Map

Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 31 sur 66.

Parfois, vous devez examiner chaque paire clé-valeur de votre hash map, plutôt que de rechercher des clés spécifiques. Rust fournit un moyen simple de parcourir toutes les données à l'aide d'une boucle for :

for (key, value) in &my_map {
    println!("{}: {}", key, value);
}

Remarquez le & avant my_map - cela crée une référence à la hash map afin que vous puissiez itérer sans en prendre la propriété. La boucle vous donne chaque paire clé-valeur sous forme de tuple que vous pouvez déstructurer directement dans la déclaration de la boucle.

Voici un exemple pratique avec une liste de prix :

let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);

for (item, price) in &prices {
    println!("{} costs ${:.2}", item, price);
}

Il y a un détail important à retenir : les tables de hachage (hash maps) ne garantissent aucun ordre d'itération spécifique. Les paires peuvent apparaître dans un ordre différent à chaque fois que vous exécutez votre programme. C'est parce que les tables de hachage privilégient la rapidité des recherches par rapport au maintien de l'ordre d'insertion, ne comptez donc pas sur l'apparition des éléments dans une séquence particulière lorsque vous effectuez une itération.

challenge icon

Défi

Facile

Vous recevrez un entier n indiquant le nombre de paires étudiant-score à traiter. Ensuite, vous recevrez n paires d'entrées : un nom d'étudiant suivi de son score au test (sous forme d'entier). Créez une table de hachage (hash map) pour stocker les noms des étudiants comme clés et leurs scores comme valeurs. Après avoir inséré toutes les paires, parcourez la table de hachage et affichez le nom et le score de chaque étudiant.

Exigences :

  • Importez HashMap depuis std::collections
  • Créez une table de hachage mutable avec les types HashMap<String, i32>
  • Lisez la première entrée et convertissez-la en i32 pour obtenir le nombre de paires
  • Utilisez une boucle pour lire n paires d'entrées (nom de l'étudiant, puis score)
  • Insérez chaque nom d'étudiant et son score dans la table de hachage
  • Utilisez une boucle for pour itérer sur la table de hachage avec &map
  • Affichez les informations de chaque étudiant au format : [name]: [score]
  • Affichez les paires dans n'importe quel ordre (les tables de hachage ne garantissent pas l'ordre)

Entrée :

  • Première ligne : Un entier n (par exemple, 3)
  • Les n paires de lignes suivantes :
    • Nom de l'étudiant (par exemple, Alice)
    • Score au test sous forme d'entier (par exemple, 95)

Sortie :

  • Une ligne pour chaque étudiant au format : [name]: [score]
  • L'ordre des lignes de sortie peut varier d'un test à l'autre

Aide-mémoire

Pour itérer sur toutes les paires clé-valeur d'une table de hachage (hash map), utilisez une boucle for avec une référence à la table :

for (key, value) in &my_map {
    println!("{}: {}", key, value);
}

Le symbole & devant la table de hachage crée une référence, permettant l'itération sans en prendre la possession (ownership). La boucle déstructure chaque paire clé-valeur sous forme de tuple.

Exemple avec une table de hachage :

let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);

for (item, price) in &prices {
    println!("{} costs ${:.2}", item, price);
}

Important : Les tables de hachage ne garantissent aucun ordre d'itération spécifique. Les paires peuvent apparaître dans des séquences différentes à chaque exécution de votre programme, car les tables de hachage privilégient la rapidité des recherches plutôt que le maintien de l'ordre d'insertion.

Essayez vous-même

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Lire le nombre de paires étudiant-score
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Créer une table de hachage mutable pour stocker les noms et les scores des étudiants
    let mut students: HashMap<String, i32> = HashMap::new();
    
    // TODO: Écrivez votre code ci-dessous
    // Lire n paires d'entrées (nom de l'étudiant et score) et les insérer dans la table de hachage
    
    
    
    // TODO: Itérer sur la table de hachage et afficher le nom et le score de chaque étudiant
    
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow