Menu
Coddy logo textTech

Parcourir une Hash Map

Fait partie de la section Logique & Flux du Journey Rust de Coddy. Leçon 31 sur 66.

Parfois, vous devez examiner chaque paire clé-valeur de votre table de hachage, 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 vers la table de hachage afin que vous puissiez itérer sans en prendre possession. La boucle vous fournit 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 ne garantissent aucun ordre d’itération particulier. Les paires peuvent apparaître dans une séquence différente chaque fois que vous exécutez votre programme. Cela s’explique par le fait que les tables de hachage privilégient les recherches rapides au maintien de l’ordre d’insertion : ne comptez donc pas sur le fait que les éléments apparaissent 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 de valeurs saisies : le nom d’un étudiant suivi de sa note (sous forme d’entier). Créez une table de hachage pour stocker les noms des étudiants comme clés et leurs notes comme valeurs. Après avoir inséré toutes les paires, parcourez la table de hachage et affichez le nom et la note de chaque étudiant.

Exigences :

  • Importez HashMap depuis std::collections
  • Créez une table de hachage mutable de type 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 de valeurs saisies (nom de l’étudiant, puis note)
  • Insérez chaque nom d’étudiant et chaque note dans la table de hachage
  • Utilisez une boucle for pour parcourir 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)
    • Note sous forme d’entier (par exemple, 95)

Sortie :

  • Une ligne pour chaque étudiant au format : [name]: [score]
  • L’ordre des lignes affichées peut varier d’une exécution de test à l’autre

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 des étudiants et les scores
    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: Parcourir 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 Logique & Flux

Entraînez-vous par vous-même : Compilateur Rust en ligne