Menu
Coddy logo textTech

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

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

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

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

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

Si aucune catégorie n’atteint 20, n’affichez rien.

REQUIRED OUTPUT FORMAT: [Your translated content here]

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