From: Alex Gutteridge Date: 2011-02-07T21:43:55+09:00 Subject: Re: making hash key from arrays On Mon, 7 Feb 2011 21:28:21 +0900, Robert Klemme wrote: > On Mon, Feb 7, 2011 at 1:12 PM, Arihan Sinha > wrote: >> Thanks for this but I am getting like >> >> [[300, 1], [300, 2], [301, 1], [301, 3], [301, 4], [302, 3], [302, >> 4]] > > ??? > > irb(main):004:0> hsh = Hash.new{|h,k| h[k]=[]} > => {} > irb(main):005:0> keys.zip(values).each{|k,v| hsh[k] << v} > => [[300, 1], [300, 2], [301, 1], [301, 3], [301, 4], [302, 3], [302, > 4]] > irb(main):006:0> hsh > => {300=>[1, 2], 301=>[1, 3, 4], 302=>[3, 4]} > >> but I actually need like >> >> hsh = {"300" =>["1","2"],"301" => ["1","3","4"],"302"=>["3","4"]} > > Btw, #zip without #each is more efficient: > > irb(main):007:0> hsh = Hash.new{|h,k| h[k]=[]} > => {} > irb(main):008:0> keys.zip(values) {|k,v| hsh[k] << v} > => nil > irb(main):009:0> hsh > => {300=>[1, 2], 301=>[1, 3, 4], 302=>[3, 4]} > > Cheers > > robert Thanks, I never knew #zip took a block argument before. -- Alex Gutteridge