Menu
Coddy logo textTech

デフォルト値付きHash.new

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 33/56。

デフォルトでは、ハッシュで存在しないキーを検索すると nil が返されます。

scores = {}
puts scores["Alice"]   # nil

Hash.new(default)はそれを変えます。存在しないキーはすべて、渡した値を返します:

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

これはカウンターを書く最も簡潔な方法です。インクリメントする前に if scores[name].nil? を確認する必要はありません。

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}

重要: Hash.new(0) はデフォルト値を 0 に設定しますが、読み取ったときにキーを保存するわけではありません。代入するまで、ハッシュは空のままです。そのため、counts[letter] += 1 と書くと、キーが新しい値とともに追加されます。

challenge icon

チャレンジ

簡単

カンマ区切りの category:amount エントリ(例: food:12,gas:30,food:8,books:25,gas:15)のリストを読み込みます。Hash.new(0) を使ってカテゴリごとの合計のハッシュを作成し、合計が少なくとも 20 であるカテゴリだけを、合計の降順で1行に1つずつ出力します:

<category>: <total>

上記の入力例の場合、出力は次のようになります:

gas: 45
books: 25
food: 20

どのカテゴリも 20 に達しない場合は、何も出力しません。

REQUIRED OUTPUT FORMAT: [Your translated content here]

自分で試してみよう

entries = gets.chomp.split(",")

# TODO: totals = Hash.new(0); カテゴリごとに金額を集計する;
#       その後、合計が >= 20 のカテゴリを合計の降順でソートして出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ