rubyでデフォルト値をもつ二重Hash

間違え:

a=Hash::new()
a.default=Hash::new()

a["1"]["3"]=5

puts a["2"]["3"]

5が表示される.おそらく参照がおかしくなる.

正解(きちんと初期化 Hash.new.each{...} は...がデフォルト処理):

a=Hash.new.each{|hash,key| hash[key]=Hash.new(0)}
a["1"]["3"]=5

puts a["1"]["3"]
puts a["2"]["3"]


http://www.rubylife.jp/ini/hash/index3.html