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 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.

challenge icon

Défi

Facile

Vous recevrez deux entrées : un nom de country et un nom de capital. Créez une map de hachage qui stocke les noms de country comme clés (type String) et leurs capital comme valeurs (type String). Insérez le country et sa capital dans la map de hachage. Ensuite, vous recevrez une troisième entrée contenant le nom d’un autre country à rechercher. Utilisez la méthode .get() pour récupérer la capital de ce country et gérez les deux cas : lorsque le country existe dans la map et lorsqu’il n’existe pas.

Remarque : .get() renvoie une 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, ce qui vous permet d’utiliser directement capital dans votre instruction d’affichage.

Exigences :

  • Importez HashMap depuis std::collections
  • Créez une map de hachage mutable avec les types HashMap<String, String>
  • Lisez la première entrée comme nom du country
  • Lisez la deuxième entrée comme nom de la capital
  • Insérez le country et la capital dans la map de hachage
  • Lisez la troisième entrée comme country à rechercher
  • Utilisez .get() pour récupérer la capital du country recherché
  • Utilisez match pour gérer l’Option renvoyée par .get()
  • Si le country est found, affichez : The capital of [country] is [capital]
  • Si le country n’est pas found, affichez : [country] not found in the map

Entrée :

  • Première ligne : nom du country à insert (par exemple, France)
  • Deuxième ligne : nom de la capital (par exemple, Paris)
  • Troisième ligne : nom du country à look up (par exemple, France ou Germany)

Sortie :

  • Si le country recherché existe : The capital of [country] is [capital]
  • Si le country 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
    
}
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

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