Menu
Coddy logo textTech

Parcourir les hashes

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

Les hashs sont énumérables, vous pouvez donc les parcourir comme des tableaux. Il existe trois modèles courants, selon ce que vous voulez faire.

each vous fournit à 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 }   # apple, bread, milk

each_value parcourt uniquement les valeurs :

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

Et toutes les méthodes Enumerable que vous avez vues au chapitre précédent, map, select, reduce : fonctionnent également sur les hashes. Vous recevez simplement une paire clé/valeur (ou un tableau de 2 éléments) à chaque itération :

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

Défi

Moyen

Tu appliques une remise à une liste de prix. Le hash prices est fourni (symbole de l’article => prix entier).

Lis une ligne d’entrée : une liste séparée par des virgules d’articles à remiser de 50 % (correspondant aux symboles du hash, par leur nom).

Affiche, dans cet ordre :

  1. Une ligne par article au format <item>: $<final_price>, où le prix final est la valeur remisée lorsque l’article figure dans la liste des remises, ou la valeur d’origine dans le cas contraire. Itère avec each. Les articles conservent leur ordre d’origine. Utilise la division entière pour la remise (price / 2).
  2. Was: $<n> : le total d’origine (utilise values.sum)
  3. Now: $<n> : le total après remise
  4. Les noms des articles dont le prix final est toujours supérieur à 2, joints par , (utilise 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 de prix final 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