Menu
Coddy logo textTech

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"]   # nil

Hash.new(default) change cela. Chaque clé manquante renvoie la valeur que vous avez fournie :

scores = Hash.new(0)
puts scores["Alice"]   # 0

C'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.

challenge icon

Défi

Facile

Lisez 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: 20

Si 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
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