Menu
Coddy logo textTech

Itérer sur les Hashes

Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 34 sur 56.

Les hachages (hashes) sont énumérables, vous pouvez donc les parcourir tout comme des tableaux. Il existe trois motifs courants, selon ce que vous souhaitez obtenir.

each vous transmet à la fois la clé et la valeur :

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key parcourt uniquement les clés :

prices.each_key { |k| puts k }   # pomme, pain, lait

each_value parcourt uniquement les valeurs :

prices.each_value { |v| puts v }   # 1, 3, 4

Et chaque méthode Enumerable que vous avez vue au chapitre précédent, map, select, reduce : fonctionne également sur les hachages. Vous recevez simplement une paire clé/valeur (ou un tableau de 2 éléments) par itération :

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

Défi

Moyen

Vous appliquez des soldes à une liste de prix. Le hash prices est fourni (symbole de l'article => prix entier).

Lisez une ligne en entrée : une liste séparée par des virgules d'articles à réduire de 50% (correspondant aux symboles dans le hash, par leur nom).

Affichez, dans cet ordre :

  1. Une ligne par article au format <item>: $<final_price>, où le prix final est la valeur réduite quand l'article est dans la liste de réduction (discount), ou la valeur d'origine sinon. Parcourez avec each. Les articles conservent leur ordre d'origine. Utilisez la division entière pour la réduction (price / 2).
  2. Was: $<n> : le total d'origine (utilisez values.sum)
  3. Now: $<n> : le total après réduction
  4. Les noms des articles dont le prix final est toujours supérieur à 2, joints par , (utilisez select + keys sur le nouveau hash)

Pour l'entrée bread,milk avec le hash par défaut, la sortie est :

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

Essayez vous-même

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# TODO: construire le hash des prix finaux via each ; afficher les lignes, les totaux, les articles chers
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 Logique et Flux

Entraînez-vous par vous-même : Compilateur Ruby en ligne