Les Hashmap en Rust : des dictionnaires
Comprendre les HashMap en Rust
En Rust, les HashMap sont l’une des structures de données les plus couramment utilisées pour stocker des paires clé-valeur. Elles sont particulièrement utiles quand tu as besoin de rechercher des valeurs à partir de clés de manière efficace. Cet article va t’expliquer comment fonctionnent les HashMap, comment les utiliser, et quelques points à prendre en compte pour bien les maîtriser.
Qu’est-ce qu’une HashMap ?
Une HashMap en Rust est une collection qui stocke des paires clé-valeur. Chaque clé est associée à une valeur, et tu peux retrouver rapidement une valeur à partir de sa clé. C’est une implémentation classique de ce qu’on appelle une table de hachage.
En Rust, la HashMap est définie dans le module std::collections
. Tu peux l’utiliser en l’important avec cette ligne :
Créer une HashMap
Pour créer une HashMap vide, tu utilises la fonction HashMap::new()
:
Ici, on crée une HashMap scores
qui associe des noms d’équipes à des scores. Tu remarqueras qu’on utilise la méthode insert()
pour ajouter des paires clé-valeur dans la HashMap.
Autre façon de créer une HashMap
Tu peux aussi créer une HashMap à partir de deux vecteurs, un pour les clés et un pour les valeurs, avec la méthode collect()
:
Ici, zip()
permet d’associer les éléments des deux vecteurs en paires clé-valeur.
Accéder à des valeurs dans une HashMap
Pour accéder à une valeur dans une HashMap, tu peux utiliser la méthode get()
en fournissant la clé :
La méthode get()
retourne une Option parce qu’il est possible que la clé ne soit pas présente dans la HashMap. Tu dois donc gérer le cas où la clé n’existe pas.
Itérer sur une HashMap
Tu peux facilement itérer sur une HashMap avec une boucle for
. Chaque itération te fournit une référence à une paire clé-valeur :
Remplacer une valeur
Si tu ajoutes une nouvelle valeur pour une clé qui existe déjà, la nouvelle valeur remplace simplement l’ancienne :
Insérer une valeur uniquement si la clé n’existe pas
Parfois, tu veux insérer une valeur uniquement si la clé n’existe pas encore. Pour cela, Rust fournit la méthode entry()
et or_insert()
:
Dans cet exemple, une valeur est insérée pour la clé "Rouge"
car elle n’existait pas encore, mais la valeur pour "Bleu"
reste inchangée car elle était déjà présente.
Mise à jour d’une valeur basée sur l’ancienne
Rust te permet aussi de mettre à jour une valeur en fonction de sa valeur actuelle. Par exemple, si tu veux augmenter le score d’une équipe, tu peux faire ceci :
Ici, la méthode entry()
te donne un accès mutable à la valeur associée à "Bleu"
, et tu peux la modifier directement.
HashMap et propriété
Lorsque tu insères des données dans une HashMap, Rust déplace les valeurs, c’est-à-dire qu’elles ne sont plus accessibles sous leur forme originale après insertion. Voici un exemple pour illustrer cela :
Dans cet exemple, après avoir inséré nom
dans la HashMap, tu ne peux plus utiliser la variable nom
parce qu’elle a été déplacée. Cela s’applique aussi bien aux clés qu’aux valeurs si elles possèdent une sémantique de possession.
Pour contourner cela, tu peux utiliser des références (&
) ou des types clonables comme Copy
pour les types scalaires.
Conclusion
Les HashMap en Rust sont une structure de données puissante et flexible pour gérer des paires clé-valeur. Elles permettent des recherches rapides et offrent plusieurs méthodes utiles pour insérer, accéder et mettre à jour des données. Cependant, il faut être attentif à la gestion de la propriété lors de l’insertion de données dans une HashMap, car Rust suit ses règles strictes de possession.
Que tu aies besoin de stocker des scores, des configurations ou tout autre ensemble de données associées, les HashMap sont un excellent outil à avoir dans ta boîte à outils Rust.