Objectifs
- Comprendre ce qu’est un
Hashet son utilité pour stocker des données structurées. - Créer un Hash en utilisant la syntaxe moderne avec des symboles.
- Accéder, ajouter et modifier des valeurs par leur clé.
- Itérer sur les paires clé-valeur d’un Hash.
Si un Array est une liste, un Hash est un dictionnaire. C’est une collection de paires clé-valeur uniques.
Qu’est-ce qu’un Hash ?
Un Hash est une structure de données qui associe une clé unique à une valeur. Au lieu d’accéder à un élément par son index numérique (comme dans un tableau), on y accède par sa clé. C’est parfait pour représenter des objets ou des ensembles de propriétés.
Création d’un Hash
Un Hash est créé avec des accolades {}.
Syntaxe moderne (recommandée)
Depuis Ruby 1.9, on utilise une syntaxe plus propre où les clés sont des Symboles (voir leçon dédiée). Un symbole est un identifiant léger qui commence par :. C’est la méthode à privilégier.
# La clé est 'nom:', la valeur est "Alice"
utilisateur = {
nom: "Alice",
age: 30,
role: "admin"
}
Ancienne syntaxe (“hash rocket”)
Vous la rencontrerez souvent dans d’anciens codes ou tutoriels. Elle utilise => pour associer la clé à la valeur. Elle est plus flexible car les clés peuvent être n’importe quel type d’objet (pas seulement des symboles).
# Ici, les clés sont des chaînes de caractères
utilisateur_vieux_style = {
"nom" => "Alice",
"age" => 30,
"role" => "admin"
}
Accéder, ajouter et modifier des valeurs
L’accès se fait avec les crochets [], en utilisant la clé.
utilisateur = { nom: "Alice", age: 30 }
# Accéder à une valeur
puts utilisateur[:nom] # => "Alice"
# Ajouter une nouvelle paire clé-valeur
utilisateur[:ville] = "Paris"
# utilisateur est maintenant { nom: "Alice", age: 30, ville: "Paris" }
# Modifier une valeur existante
utilisateur[:age] = 31
puts utilisateur[:age] # => 31
# Si on demande une clé qui n'existe pas, on obtient nil
puts utilisateur[:pays] # => nil (n'affiche rien)
Méthodes utiles
-
.keys: Renvoie un tableau de toutes les clés.utilisateur.keys# => [:nom, :age, :ville] -
.values: Renvoie un tableau de toutes les valeurs.utilisateur.values# => [“Alice”, 31, “Paris”] -
.key?(ma_cle)ou.has_key?(ma_cle): Renvoietruesi le hash contient la clé.utilisateur.key?(:nom)# => trueutilisateur.key?(:pays)# => false
Itérer sur un Hash avec .each
L’itérateur .each pour un hash vous donne accès à la fois à la clé et à la valeur à chaque tour de boucle.
utilisateur = { nom: "Alice", age: 30, role: "admin" }
utilisateur.each do |cle, valeur|
puts "La clé est :#{cle}, et la valeur est :#{valeur}"
end
Sortie :
La clé est :nom, et la valeur est :Alice
La clé est :age, et la valeur est :30
La clé est :role, et la valeur est :admin
Bonnes pratiques
- Utilisez la syntaxe moderne avec des symboles (
{ nom: "valeur" }) dès que possible. C’est plus lisible et plus performant. - Les Hashes sont parfaits pour passer des options nommées à une méthode.
Exercices
-
Mon profil :
- Créez un Hash nommé
mon_profilqui vous décrit avec au moins trois paires clé-valeur (ex::prenom,:hobby,:langage_prefere). - Affichez la valeur de votre hobby.
- Créez un Hash nommé
-
Modification de profil :
- Reprenez le hash de l’exercice 1.
- Ajoutez une nouvelle clé
:villeavec votre ville. - Modifiez la valeur de votre
:hobby. - Affichez le hash complet pour voir les changements.
-
Affichage structuré :
- Utilisez l’itérateur
.eachsur votre hashmon_profilpour afficher chaque propriété sur une ligne séparée, dans un format lisible. - Exemple de sortie :
- prenom: Alice - hobby: randonnée - ...
- Utilisez l’itérateur