Menu
Coddy logo textTech

Accéder aux valeurs

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

Une fois que vous avez des données stockées dans votre hash map, 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 retourne pas directement la valeur. Au lieu de cela, elle retourne un type Option — un type Rust intégré qui représente soit une valeur présente (Some), soit absente (None). C'est parce que la clé que vous recherchez pourrait ne pas exister dans la hash map.

Lorsque la clé existe, .get() renvoie Some(&value) - remarquez le symbole &, ce qui signifie que vous obtenez une référence vers la valeur. 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"),
}

Dans la branche de correspondance Some(capital), Rust gère automatiquement la référence pour vous — capital ici est lié à la valeur référencée interne, vous n'avez donc pas besoin d'écrire & explicitement dans le motif.

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 - rendant votre code plus robuste et prévisible.

challenge icon

Défi

Facile

Vous recevrez deux entrées : un nom de pays et un nom de capitale. Créez une hash map 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 hash map. Ensuite, vous recevrez une troisième entrée avec un autre nom de 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 map et lorsqu'il n'existe pas.

Note : .get() renvoie une Option — soit Some(&value) (une référence à la valeur) lorsque la clé existe, soit None lorsqu'elle n'existe pas. Dans une branche match, vous pouvez écrire Some(capital) et Rust gérera automatiquement la référence pour vous, vous permettant ainsi d'utiliser capital directement dans votre instruction d'affichage.

Exigences :

  • Importez HashMap depuis std::collections
  • Créez une hash map mutable avec les types HashMap<String, String>
  • Lisez la première entrée comme nom de pays
  • Lisez la deuxième entrée comme nom de capitale
  • Insérez le pays et la capitale dans la hash map
  • Lisez la troisième entrée comme le pays à rechercher
  • Utilisez .get() pour récupérer la capitale du pays recherché
  • Utilisez match pour gérer l'Option renvoyée 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, France ou Germany)

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

Aide-mémoire

La méthode .get() récupère une valeur d'une table de hachage (hash map) en utilisant sa clé :

let value = my_map.get("some_key");

La méthode .get() renvoie un type Option car la clé pourrait ne pas exister dans la table de hachage :

  • Lorsque la clé existe : renvoie Some(&value) (une référence à la valeur)
  • Lorsque la clé n'existe pas : renvoie None

Utilisez match pour gérer les deux cas :

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Cette conception empêche les plantages lors de l'accès à des clés inexistantes en vous forçant à gérer les deux possibilités.

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 une HashMap, insérer le pays et la capitale, puis rechercher le pays
    
}
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