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}"
endeach_key parcourt uniquement les clés :
prices.each_key { |k| puts k } # apple, bread, milkeach_value parcourt uniquement les valeurs :
prices.each_value { |v| puts v } # 1, 3, 4Et 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}Défi
MoyenTu 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 :
- 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 aveceach. Les articles conservent leur ordre d’origine. Utilise la division entière pour la remise (price / 2). Was: $<n>: le total d’origine (utilisevalues.sum)Now: $<n>: le total après remise- Les noms des articles dont le prix final est toujours supérieur à
2, joints par,(utiliseselect+keyssur 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
cheeseEssayez 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
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
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - Tisseur de chaînes4Blocs, Procs et Lambdas
Qu'est-ce qu'un bloc ?do..end ou accoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes, 2e partie
Hash.new avec valeurs par défautParcourir les hashesHashes imbriquésFusionner et transformerRécapitulatif - Compteur de fréquences10Projet - Dossiers des étudiants
Présentation du projetAjouter un étudiant2Plages
Qu’est-ce qu’une plage ?Méthodes des plagesPlages dans Case / WhenRécapitulatif - Exercices sur les plages5Puissance des Enumerable
Select et RejectChaînage de MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Pipeline de donnéesEntraînez-vous par vous-même : Compilateur Ruby en ligne