Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   Hash#each with nested array as value (http://www.velocityreviews.com/forums/t844965-hash-each-with-nested-array-as-value.html)

Earle Clubb 10-17-2007 03:45 PM

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

--------------------
--
Posted via http://www.ruby-forum.com/.


Phrogz 10-17-2007 03:57 PM

Re: Hash#each with nested array as value
 
On Oct 17, 9:45 am, Earle Clubb <ecl...@valcom.com> 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


Gordon Thiesfeld 10-17-2007 04:05 PM

Re: Hash#each with nested array as value
 
On 10/17/07, Earle Clubb <eclubb@valcom.com> 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
>>



Earle Clubb 10-17-2007 06:09 PM

Re: Hash#each with nested array as value
 
Gordon Thiesfeld wrote:
> On 10/17/07, Earle Clubb <eclubb@valcom.com> 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
--
Posted via http://www.ruby-forum.com/.



All times are GMT. The time now is 02:07 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.