RubyではHashのデフォルト値をHash.newの引数として渡すことで実現できますが、配列を渡すと同じ参照になってしまうのでうまくいきません。
list = Hash.new([]) list[:even] << 2 p list[:even] #=> [2] list[:odd] << 3 p list[:odd] #=> [2,3]
[2] [2, 3]
ですので、配列の場合は少し違う書き方をしないといけません。
list = Hash.new{|hash, key| hash[key] = []} list[:even] << 2 p list[:even] #=> [2] list[:odd] << 3 p list[:odd] #=> [3]
[2] [3]
Hash.newにブロックを与えるとブロック引数の1番目がhash自身、2番目がkeyとなります。そこで上記のように配列を定義してあげると、keyごとに配列を初期化することが出来るようになります。