Hash.new avec valeurs par défaut
Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 33 sur 56.
Par défaut, rechercher une clé absente dans un hash renvoie nil :
scores = {}
puts scores["Alice"] # nilHash.new(default) change cela. Chaque clé manquante renvoie la valeur que vous lui avez transmise :
scores = Hash.new(0)
puts scores["Alice"] # 0C’est la façon la plus claire d’écrire un compteur. Vous n’avez pas besoin de vérifier if scores[name].nil? avant d’incrémenter :
counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
counts[letter] += 1
end
puts counts.inspect # {"a"=>3, "b"=>1, "c"=>1}Important : Hash.new(0) définit la valeur par défaut sur 0, mais ne stocke pas la clé lorsque vous la lisez. Le hash reste vide jusqu’à ce que vous effectuiez une affectation. Ainsi, dès que vous écrivez counts[letter] += 1, la clé est ajoutée avec la nouvelle valeur.
Défi
FacileLisez une liste d’entrées category:amount séparées par des virgules (par ex. food:12,gas:30,food:8,books:25,gas:15). Construisez un hash des totaux par catégorie à l’aide de Hash.new(0), puis affichez uniquement les catégories dont le total est d’au moins 20, une par ligne, triées par total décroissant :
<category>: <total>Pour l’entrée d’exemple ci-dessus, la sortie est :
gas: 45
books: 25
food: 20Si aucune catégorie n’atteint 20, n’affichez rien.
Essayez vous-même
entries = gets.chomp.split(",")
# TODO: totals = Hash.new(0); accumuler le montant par catégorie;
# puis afficher les catégories avec un total >= 20, triées par total décroissant
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