Menu
Coddy logo textTech

Insérer des paires clé-valeur

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

Maintenant que vous avez une table de hachage vide, il est temps d'y ajouter des données. Vous pouvez insérer des paires clé-valeur dans une table de hachage en utilisant la méthode .insert() :

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

La méthode .insert() prend deux paramètres : la clé et la valeur. Dans cet exemple, nous stockons des noms de pays comme clés et leurs capitales comme valeurs.

Il y a un comportement important à retenir : si vous insérez une clé qui existe déjà dans la hash map, la nouvelle valeur écrasera l'ancienne :

capitals.insert("France", "Lyon");  // Cela écrase "Paris"

Après cette opération, rechercher « France » retournerait « Lyon » au lieu de « Paris ». Ce comportement d'écrasement rend .insert() utile à la fois pour ajouter de nouvelles entrées et pour mettre à jour celles existantes dans votre hash map.

challenge icon

Défi

Facile

Vous recevrez trois entrées : un nom de produit, son prix (sous forme de nombre décimal) et un autre nom de produit. Créez une hash map mutable pour stocker les noms de produits en tant que clés (type String) et leurs prix en tant que valeurs (type f64). Insérez le premier produit avec son prix dans la hash map. Ensuite, insérez le deuxième produit avec un prix de 0.0. Enfin, mettez à jour le prix du deuxième produit à 15.99 en l'insérant à nouveau avec le nouveau prix. Affichez toutes les informations dans le format exact indiqué ci-dessous.

Note sur .clone() : Lors de l'insertion d'une variable String comme clé dans une HashMap, les règles de possession (ownership) de Rust signifient que la variable sera déplacée (moved) dans la map et ne sera plus utilisable par la suite. Pour continuer à utiliser la variable (par exemple, pour l'afficher ou l'insérer à nouveau), appelez .clone() sur celle-ci lors du passage à insert(). Par exemple : map.insert(name.clone(), price).

Exigences :

  • Importez HashMap depuis std::collections
  • Créez une hash map mutable avec les types HashMap<String, f64>
  • Lisez la première entrée comme le premier nom de produit
  • Lisez la deuxième entrée et convertissez-la en f64 pour le prix du premier produit
  • Insérez le premier produit et son prix dans la hash map en utilisant .clone() sur le nom du produit
  • Lisez la troisième entrée comme le deuxième nom de produit
  • Insérez le deuxième produit avec un prix de 0.0 en utilisant .clone() sur le nom du produit
  • Insérez à nouveau le deuxième produit avec un prix de 15.99 en utilisant .clone() (cela écrasera la valeur précédente)
  • Affichez les informations pour les deux produits dans le format exact indiqué ci-dessous

Entrée :

  • Première ligne : Premier nom de produit (par ex., Laptop)
  • Deuxième ligne : Prix du premier produit sous forme de nombre décimal (par ex., 999.99)
  • Troisième ligne : Deuxième nom de produit (par ex., Mouse)

Sortie :

  • Première ligne : Inserted [first_product] at $[price]
  • Deuxième ligne : Inserted [second_product] at $0.00
  • Troisième ligne : Updated [second_product] to $15.99

Aide-mémoire

Pour insérer des paires clé-valeur dans une hash map, utilisez la méthode .insert() :

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

La méthode .insert() prend deux paramètres : la clé et la valeur.

Si vous insérez une clé qui existe déjà, la nouvelle valeur écrasera l'ancienne :

capitals.insert("France", "Lyon");  // Cela écrase "Paris"

Ce comportement d'écrasement rend .insert() utile à la fois pour ajouter de nouvelles entrées et pour mettre à jour celles existantes.

Essayez vous-même

use std::collections::HashMap;
use std::io;

fn main() {
    // Lire les entrées
    let mut product1 = String::new();
    io::stdin().read_line(&mut product1).expect("Failed to read line");
    let product1 = product1.trim().to_string();
    
    let mut price1_input = String::new();
    io::stdin().read_line(&mut price1_input).expect("Failed to read line");
    let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
    
    let mut product2 = String::new();
    io::stdin().read_line(&mut product2).expect("Failed to read line");
    let product2 = product2.trim().to_string();
    
    // TODO: Écrivez votre code ci-dessous
    // Créer un HashMap mutable, insérer les produits et afficher la sortie requise
    
}
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