Multilevel hash

With perl it's easy to write:

$Q{$date}{$song_played} += 1

How I can accomplish the same thing with ruby?

Thanks!

http://pleac.sourceforge.net/pleac_ruby/index.html didn't help much
here.

aartist wrote:

With perl it's easy to write:

$Q{$date}{$song_played} += 1

How I can accomplish the same thing with ruby?

Thanks!

PLEAC-Ruby didn't help much
here.

irb(main):001:0> mh = Hash.new {|h,k| h[k] = {} }
=> {}
irb(main):002:0> mh[1][2] = 3
=> 3
irb(main):003:0> mh
=> {1=>{2=>3}}

You can also do variable-level hashing:

irb(main):006:0> pr = proc {|h,k| h[k] = Hash.new(&pr) }
=> #<Proc:0x4021eb08@(irb):6>
irb(main):007:0> vh = Hash.new(&pr)
=> {}
irb(main):008:0> vh[1][2][3][4] = 5
=> 5
irb(main):009:0> vh
=> {1=>{2=>{3=>{4=>5}}}}

(This is ruby-talk folklore!)

aartist ha scritto:

With perl it's easy to write:

$Q{$date}{$song_played} += 1

How I can accomplish the same thing with ruby?

Thanks!

PLEAC-Ruby didn't help much
here.

>> q={'key'=>{'key2'=>1}}
=> {"key"=>{"key2"=>1}}
>> q['key']['key2']+=1
=> 2
>> q['key']['key2']
=> 2

Joel VanderWerf wrote:

aartist wrote:

With perl it's easy to write:

$Q{$date}{$song_played} += 1

How I can accomplish the same thing with ruby?

Thanks!

PLEAC-Ruby didn't help much
here.

irb(main):001:0> mh = Hash.new {|h,k| h[k] = {} }
=> {}
irb(main):002:0> mh[1][2] = 3
=> 3
irb(main):003:0> mh
=> {1=>{2=>3}}

And if you want automatic zeros:

irb(main):010:0> mh0 = Hash.new {|h,k| h[k] = Hash.new(0)}
=> {}
irb(main):011:0> mh0[1][2] += 1
=> 1
irb(main):012:0> mh0
=> {1=>{2=>1}}