Accéder aux valeurs
Fait partie de la section Logique & Flux du Journey Rust de Coddy. Leçon 30 sur 66.
Une fois que vous avez stocké des données dans votre table de hachage, vous aurez besoin d’un moyen de les récupérer. La méthode .get() vous permet de rechercher une valeur à l’aide de sa clé :
let value = my_map.get("some_key");Cependant, il y a un détail important à comprendre : .get() ne renvoie pas directement la valeur. À la place, il renvoie un type Option : un type Rust intégré qui représente soit « quelque chose », soit « rien ». Cela s’explique par le fait que la clé recherchée peut ne pas exister dans la table de hachage.
Lorsque la clé existe, .get() renvoie Some(&value) — remarquez le symbole &, qui signifie que vous obtenez une référence vers la valeur, et non la valeur elle-même. Lorsque la clé n’existe pas, il renvoie None :
match capitals.get("France") {
Some(capital) => println!("The capital is {}", capital),
None => println!("Country not found"),
}Vous remarquerez peut-être que le bras de match utilise Some(capital) sans & explicite. Cela s’explique par le fait que Rust gère automatiquement la référence pour vous dans ce contexte : capital contient toujours une référence vers la valeur, mais vous n’avez pas besoin d’écrire explicitement & dans le motif. La correspondance de motifs de Rust est suffisamment intelligente pour vous permettre d’utiliser directement capital, par exemple lors de son affichage.
Cette conception empêche votre programme de planter lorsque vous essayez d’accéder à une clé qui n’existe pas. Au lieu de provoquer une erreur, Rust vous oblige à gérer les deux possibilités — trouver la valeur ou ne pas la trouver — ce qui rend votre code plus robuste et prévisible.
Défi
FacileVous recevrez deux entrées : un nom de pays et le nom d’une capitale. Créez une table de hachage qui stocke les noms de pays comme clés (type String) et leurs capitales comme valeurs (type String). Insérez le pays et sa capitale dans la table de hachage. Ensuite, vous recevrez une troisième entrée contenant le nom d’un autre pays à rechercher. Utilisez la méthode .get() pour récupérer la capitale de ce pays et gérez les deux cas : lorsque le pays existe dans la table et lorsqu’il n’y existe pas.
Remarque : .get() renvoie un Option, soit Some(&value) (une référence vers la valeur) lorsque la clé existe, soit None lorsqu’elle n’existe pas. Dans une branche de match, vous pouvez écrire Some(capital) et Rust gérera automatiquement la référence pour vous, afin que vous puissiez utiliser capital directement dans votre instruction d’affichage.
Exigences :
- Importez
HashMapdepuisstd::collections - Créez une table de hachage mutable de type
HashMap<String, String> - Lisez la première entrée comme nom du pays
- Lisez la deuxième entrée comme nom de la capitale
- Insérez le pays et sa capitale dans la table de hachage
- Lisez la troisième entrée comme pays à rechercher
- Utilisez
.get()pour récupérer la capitale du pays recherché - Utilisez
matchpour gérer leOptionrenvoyé par.get() - Si le pays est trouvé, affichez :
The capital of [country] is [capital] - Si le pays n’est pas trouvé, affichez :
[country] not found in the map
Entrée :
- Première ligne : nom du pays à insérer (par exemple,
France) - Deuxième ligne : nom de la capitale (par exemple,
Paris) - Troisième ligne : nom du pays à rechercher (par exemple,
FranceouGermany)
Sortie :
- Si le pays recherché existe :
The capital of [country] is [capital] - Si le pays recherché n’existe pas :
[country] not found in the map
Essayez vous-même
use std::collections::HashMap;
use std::io;
fn main() {
// Lire le nom du pays à insérer
let mut country = String::new();
io::stdin().read_line(&mut country).expect("Failed to read line");
let country = country.trim().to_string();
// Lire le nom de la capitale
let mut capital = String::new();
io::stdin().read_line(&mut capital).expect("Failed to read line");
let capital = capital.trim().to_string();
// Lire le nom du pays à rechercher
let mut lookup_country = String::new();
io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
let lookup_country = lookup_country.trim().to_string();
// TODO: Écrivez votre code ci-dessous
// Créer un HashMap, insérer le pays et la capitale, puis rechercher le pays
}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