Hash.new avec des 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, la recherche d'une clé manquante dans un hash retourne nil :
scores = {}
puts scores["Alice"] # nilHash.new(default) change cela. Chaque clé manquante renvoie la valeur que vous avez fournie :
scores = Hash.new(0)
puts scores["Alice"] # 0C'est la manière la plus propre d'écrire un compteur. Vous n'avez pas besoin de vérifier if scores[name].nil? avant l'incrémentation :
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 à 0 mais ne stocke pas la clé lorsque vous la lisez. Le hash reste vide jusqu'à ce que vous fassiez une affectation. Ainsi, une fois 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 en utilisant 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'exemple d'entrée 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 - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data PipelineEntraînez-vous par vous-même : Compilateur Ruby en ligne