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.
Défi
FacileVous 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
HashMapdepuisstd::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
f64pour 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.0en utilisant.clone()sur le nom du produit - Insérez à nouveau le deuxième produit avec un prix de
15.99en 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
}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
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 final