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] ]
Thanks in advance,
-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] ]
Thanks in advance,
-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]]
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] ]
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