Pythonのハッシュテーブル(Pythonではdictと言いますね)には、初期値が設定できる亜種としてdefaultdictというものがある。Rubyの場合、Hashクラスには初期値が設定できるが、初期値としては整数か文字列、シンボルぐらいしか使えない。初期値として配列とかハッシュテーブルを使えないのである。 そこで、Pythonのdefaultdictっぽいものを作ってみた。以下にコードを示す。 class DefaultHash < Hash def initialize(init) @init = init end def [](k) v = super k if v v else self[k] = @init.clone end end end a = [1,2,3,4,5,4,3] h = DefaultHash.new(Array.new) a.each{|k| h[k].