2010/3/9 Glenn Ritz <glenn_ritz / yahoo.com>:
> Jean G. wrote:
>> On Tue, Mar 9, 2010 at 8:31 PM, Glenn Ritz <glenn_ritz / yahoo.com> wrote:
>>> Hi,
>>>
>>> I would like to take a nested hash that looks like this:
>>>
>>> {"a"=3D>{"b"=3D>{"c"=3D>1}, "b2"=3D>{"c2"=3D>2}}}
>>>
>>> and turn it into an array of 2 element arrays like this:
>>>
>>> [["a: b2: c2: ", 2], ["a: b: c: ", 1]]
>>>
>>
>> My method:
>>
>> hash =3D {"a"=3D>{"b"=3D>{"c"=3D>1}, "b2"=3D>{"c2"=3D>2}}}
>> array =3D []
>>
>> hash.keys.each do |k1|
>> =A0 =A0 hash[k1].keys.each do |k2|
>> =A0 =A0 =A0 =A0 hash[k1][k2].keys.each do |k3|
>> =A0 =A0 =A0 =A0 =A0 =A0 =A0array << ["#{k1}: #{k2}: #{k3}:",hash[k1][k2]=
[k3]]
>> =A0 =A0 =A0 =A0 end
>> =A0 =A0 end
>> end
>
> Thanks, Jean.
>
> It's a good solution. =A0But it's dependent on there being 3 levels of
> hashes. =A0What if you didn't know how many levels of nesting there was
> before executing the code? =A0Suppose the hash looked like this instead:
>
> {"a"=3D>{"b"=3D>{"c"=3D>1}, "b2"=3D>{"c2"=3D> {"d2" =3D> 2}}}}

Basically you want to do a DFS and store the path to the root for
every leaf.  Something like http://gist.github.com/326558

Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/