# Multi-dimensional arrays to 2-dimensional arrays

Hi,

I have a recursive method that aggregates data in the form of
2-dimensional
arrays.
The problem is at the top of the recursion call, I ended up with
multi-dimensional arrays which depend
on how deep the recursion is.

What is the best way to flatten multi-dimensional arrays back into
2-dimensional arrays?
the data might look like this:
[ [a, b, c], [ [ [d, e], [f, g] ], [h, i] ]
and I would like to be flatten into:
[ [a, b, c], [d, e], [f, g], [h, i] ]

-DJ

Wirianto Djunaidi wrote:

the data might look like this:
[ [a, b, c], [ [ [d, e], [f, g] ], [h, i] ]
and I would like to be flatten into:
[ [a, b, c], [d, e], [f, g], [h, i] ]

-DJ

I don’t think you’ve properly defined your inputs and outputs. You
shouldn’t need an extra “flattening” step if your recursion is correctly
defined.

From: Wirianto Djunaidi [mailto:[email protected]]

# [ [a, b, c], [d, e], [f, g], [h, i] ]

you can also recurse it back

eg,

a = [[:a, :b, :c], [[[:d, :e], [:f, :g]], [:h, :i]]]
#=> [[:a, :b, :c], [[[:d, :e], [:f, :g]], [:h, :i]]]

class Array
def flat2
a=[]
self.each { |e| a += ( e == e.flatten ? [e] : e.flat2 ) }
a
end
end
#=> nil

p a.flat2
[[:a, :b, :c], [:d, :e], [:f, :g], [:h, :i]]
#=> nil

of course, the better way is to not perform this (back) recursing at all
by reexamining your first recurs algo (as suggested by Ed B)

kind regards -botp

Yeah, I figure out my problem. The reason I got nested multi-dimension
array
is each recursion return a 2-d array. And when I combined them together
I
use <<, which add the whole 2-d as 1 object into the result at the lower
stack. I switch it to use += to combine the array and that fix it.

Thanks all,
-DJ

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.