Multilevel hash

J

Joel VanderWerf

aartist said:
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.

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!)
 
J

Joel VanderWerf

Joel said:
aartist said:
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.

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}}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,172
Messages
2,570,934
Members
47,477
Latest member
ColumbusMa

Latest Threads

Top