RubyのHashを作成するとき、Default valueをempty arrayにしたいとき、Hash.new([])
とすると、すべての存在しないないkeyに対して同じArray instanceを参照することになります。
そのため、以下のようにHashへElementの追加と、その追加したElementのValueであるArrayにElementの追加を行うと、すべて同じArrayに追加されてしまいます。
hash = Hash.new([])
hash['hoge'] << 'a'
hash['fuga'] << 'b'
hash['hoge']
=> ['a', 'b']
hash['fuga']
=> ['a', 'b']
hash['foo']
=> ['a', 'b']
上記のようにして、別々のElementにするためには、下記のように新しいHashを作る必要があります。
hash = Hash.new { |h, k| h[k] = [] }