Retour au cours

les hashes

Objectifs

  • Comprendre ce qu’est un Hash et 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) : Renvoie true si le hash contient la clé. utilisateur.key?(:nom) # => true utilisateur.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

  1. Mon profil :

    • Créez un Hash nommé mon_profil qui vous décrit avec au moins trois paires clé-valeur (ex: :prenom, :hobby, :langage_prefere).
    • Affichez la valeur de votre hobby.
  2. Modification de profil :

    • Reprenez le hash de l’exercice 1.
    • Ajoutez une nouvelle clé :ville avec votre ville.
    • Modifiez la valeur de votre :hobby.
    • Affichez le hash complet pour voir les changements.
  3. Affichage structuré :

    • Utilisez l’itérateur .each sur votre hash mon_profil pour afficher chaque propriété sur une ligne séparée, dans un format lisible.
    • Exemple de sortie :
      - prenom: Alice
      - hobby: randonnée
      - ...