From: w_a_x_man Date: 2010-10-25T06:54:54+09:00 Subject: Re: Convert Array to nested Hash On Oct 24, 6:07 am, Robert Klemme wrote: > > irb(main):019:0> [ > irb(main):020:1*   ["A", "a", 1], > irb(main):021:1*   ["A", "b", 2], > irb(main):022:1*   ["B", "a", 1], > irb(main):023:1* > irb(main):024:1* ].inject({}) do |h,(k1,k2,v)| > irb(main):025:1*   (h[k1] ||= {})[k2] = v > irb(main):026:1>   h > irb(main):027:1> end > => {"A"=>{"a"=>1, "b"=>2}, "B"=>{"a"=>1}} > > and another one > > irb(main):028:0> [ > irb(main):029:1*   ["A", "a", 1], > irb(main):030:1*   ["A", "b", 2], > irb(main):031:1*   ["B", "a", 1], > irb(main):032:1* > irb(main):033:1* ].inject(Hash.new {|h,k| > h[k]=Hash.new(&h.default_proc)}) do |h,(k1,k2,v)| > irb(main):034:1*   h[k1][k2] = v > irb(main):035:1>   h > irb(main):036:1> end > => {"A"=>{"a"=>1, "b"=>2}, "B"=>{"a"=>1}} > a = [ ["A", "a", 1], ["A", "b", 2], ["B", "a", 1] ] h = Hash.new{|hash,key| hash[key] = {} } a.each{|x,y,z| h[x][y] = z}