From: Leslie Viljoen Date: 2008-02-21T00:06:39+09:00 Subject: Re: ||= [] idiom On Feb 20, 2008 12:26 AM, MenTaLguY wrote: > On Wed, 20 Feb 2008 07:15:52 +0900, Sebastian Hungerecker wrote: > >> .. is there a better way? > > > > @categories = Hash.new {Array.new} > > pagelist.each do |resource| > > @categories[resource.tag] << resource > > end > > Although it is specific to hashes, when this is applicable I do > think it can be a better approach than the more general approach > I outlined in my other email. > > -mental Doesn't seem to work though: irb(main):030:0> k=Hash.new{Array.new} => {} irb(main):031:0> k => {} irb(main):032:0> k[1] << 1 => [1] irb(main):033:0> k[1] << 1 => [1] irb(main):034:0> k[1] << 1 => [1] irb(main):035:0> k[1] << 1 => [1] irb(main):036:0> k => {} irb(main):037:0> k[1] => [] This works: irb(main):038:0> h = Hash.new{|h, k| h[k] = []} => {} irb(main):039:0> h[1] << 1 => [1] irb(main):040:0> h[1] << 1 => [1, 1] irb(main):041:0> h[1] << 1 => [1, 1, 1] irb(main):042:0> h => {1=>[1, 1, 1]} irb(main):043:0> h[1] << 2 => [1, 1, 1, 2] irb(main):044:0> h[2] << 2 => [2] irb(main):045:0> h[2] << 2 => [2, 2] irb(main):046:0> h => {1=>[1, 1, 1, 2], 2=>[2, 2]} Great!