Hash#each with nested array as value

I have a hash where the values are nested arrays. I’d like to be able to
iterate over the hash and have 3 vars available in the block: key,
value[0], and value[1]. As you can see, h.each {|a,b,c|…} doesn’t
work. Is there a better way to do it than the last line below? Thanks.

Earle


irb(main):001:0> require ‘pp’
=> true
irb(main):002:0> h = {0 => [[1], [2]]}
=> {0=>[[1], [2]]}
irb(main):003:0> h.each {|a, b| pp a, b}
0
[[1], [2]]
=> {0=>[[1], [2]]}
irb(main):004:0> h.each {|a, b, c| pp a, b, c}
0
[[1], [2]]
nil
=> {0=>[[1], [2]]}
irb(main):005:0> h.each {|a, b| pp a, b[0], b[1]}
0
[1]
[2]
=> {0=>[[1], [2]]}


On Oct 17, 9:45 am, Earle C. [email protected] wrote:

I have a hash where the values are nested arrays. I’d like to be able to
iterate over the hash and have 3 vars available in the block: key,
value[0], and value[1]. As you can see, h.each {|a,b,c|…} doesn’t
work.

Not much better, but:

irb(main):006:0> h = { :a => [:foo, :bar] }
=> {:a=>[:foo, :bar]}

irb(main):007:0> h.each{ |key,pair| a,b = *pair; p key, a, b }
:a
:foo
:bar

On 10/17/07, Earle C. [email protected] wrote:

I have a hash where the values are nested arrays. I’d like to be able to
iterate over the hash and have 3 vars available in the block: key,
value[0], and value[1]. As you can see, h.each {|a,b,c|…} doesn’t
work. Is there a better way to do it than the last line below? Thanks.

Earle

Use parentheses.

h = [0 => [[1],[2]]}
h.each{|k,(a,b)| p k, a, b}
0
[1]
[2]
=> {0=>[[1], [2]]}

Regards,

Gordon

Gordon T. wrote:

On 10/17/07, Earle C. [email protected] wrote:

I have a hash where the values are nested arrays. I’d like to be able to
iterate over the hash and have 3 vars available in the block: key,
value[0], and value[1]. As you can see, h.each {|a,b,c|…} doesn’t
work. Is there a better way to do it than the last line below? Thanks.

Earle

Use parentheses.

h = [0 => [[1],[2]]}
h.each{|k,(a,b)| p k, a, b}
0
[1]
[2]
=> {0=>[[1], [2]]}

Regards,

Gordon

Perfect. Thanks, Gordon.

Earle