Hash の default_proc が便利

Hash を初期化した際にブロックを記述しておくと、存在しないキーを呼び出したときに実行される。

hash = Hash.new { |h, k| h[k] = [] }

または、 default_proc= で後から指定することも可能。

hash.default_proc = ->(h, k) { h[k] = [] }

例えば、上記のコードが無かった場合に下記のコードはエラーになる

hash = Hash.new
hash[:a] << 'aiueo'

特定のキーに対して配列で順次格納したい場合とかに有効だと思う。