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.
Défi
FacileVous 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
HashMapdepuisstd::collections - Créez une table de hachage mutable de type
HashMap<String, i32> - Lisez la première entrée et convertissez-la en
i32pour obtenir le nombre de paires - Utilisez une boucle pour lire
npaires 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
forpour 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
npaires de lignes suivantes :- Nom de l’étudiant (par exemple,
Alice) - Note sous forme d’entier (par exemple,
95)
- Nom de l’étudiant (par exemple,
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
}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
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode finalEntraînez-vous par vous-même : Compilateur Rust en ligne