Nuby Array questions - each iterates nested arrays?

a=[[1, 2, 3], [4, 5, 6]]
=> [[1, 2, 3], [4, 5, 6]]
a.length
=> 2
a.each {|x| puts x}
1
2
3
4
5
6
=> [[1, 2, 3], [4, 5, 6]]
a.each_index {|x| puts x}
0
1

Why does each traverse into the inner arrays as well (tried it with 3
and 4 deep?)
Array#length seems to be correct to me and Array#each_index
This seems to happen to collect!, and I'd gather other methods as well.

Convenient, if you want depth first traversal on all arrays. but what
if you just want to iterate in a shallow manner?

Thanks
Ed

a.flatten.each { |x| p x}

:slight_smile:

···

--- Ursprüngliche Nachricht ---
Von: Ed Howland <ed.howland@gmail.com>
An: ruby-talk@ruby-lang.org (ruby-talk ML)
Betreff: Nuby Array questions - each iterates nested arrays?
Datum: Thu, 27 Oct 2005 02:16:39 +0900

a=[[1, 2, 3], [4, 5, 6]]
=> [[1, 2, 3], [4, 5, 6]]
a.length
=> 2
a.each {|x| puts x}
1
2
3
4
5
6
=> [[1, 2, 3], [4, 5, 6]]
a.each_index {|x| puts x}
0
1

Why does each traverse into the inner arrays as well (tried it with 3
and 4 deep?)
Array#length seems to be correct to me and Array#each_index
This seems to happen to collect!, and I'd gather other methods as well.

Convenient, if you want depth first traversal on all arrays. but what
if you just want to iterate in a shallow manner?

Thanks
Ed

Ed Howland wrote:

Why does each traverse into the inner arrays as well (tried it with 3
and 4 deep?)

This does not happen, but the puts makes it seem so. What really
happens is this:

=> puts [1, 2, 3]
1
2
3
=> puts [4, 5, 6]
4
5
6

Try p though:

=> [[1, 2, 3], [4, 5, 6]].each {|x| p x}
[1, 2, 3]
[4, 5, 6]

Greetings,
Markus

another possible solution:

class Array
  def each_recursive(&block)
    each do |x|
      if Enumerable === x
        x.each_recursive(&block)
      else
        yield x
      end
    end
  end
end

a=[[1, 2, 3], [4, 5, 6]]
a.each_recursive { |x| p x}

···

--- Ursprüngliche Nachricht ---
Von: "Peter Ertl" <pertl@gmx.org>
An: ruby-talk@ruby-lang.org (ruby-talk ML)
Betreff: Re: Nuby Array questions - each iterates nested arrays?
Datum: Thu, 27 Oct 2005 02:22:44 +0900

a.flatten.each { |x| p x}

:slight_smile:

> --- Ursprüngliche Nachricht ---
> Von: Ed Howland <ed.howland@gmail.com>
> An: ruby-talk@ruby-lang.org (ruby-talk ML)
> Betreff: Nuby Array questions - each iterates nested arrays?
> Datum: Thu, 27 Oct 2005 02:16:39 +0900
>
> a=[[1, 2, 3], [4, 5, 6]]
> => [[1, 2, 3], [4, 5, 6]]
> a.length
> => 2
> a.each {|x| puts x}
> 1
> 2
> 3
> 4
> 5
> 6
> => [[1, 2, 3], [4, 5, 6]]
> a.each_index {|x| puts x}
> 0
> 1
>
> Why does each traverse into the inner arrays as well (tried it with 3
> and 4 deep?)
> Array#length seems to be correct to me and Array#each_index
> This seems to happen to collect!, and I'd gather other methods as well.
>
> Convenient, if you want depth first traversal on all arrays. but what
> if you just want to iterate in a shallow manner?
>
> Thanks
> Ed
>