Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: Unfolding a nDeep structure

by blokhead (Monsignor)
on Jul 05, 2007 at 23:13 UTC ( [id://625149]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Unfolding a nDeep structure
in thread Unfolding a nDeep structure

If I understand right (from looking at your example code in the OP), you want a structure that looks like this:
@AoA = ( [ $MDA[0][0][0], $MDA[0][0][1], ... , $MDA[0][2][2] ], [ $MDA[1][0][0], $MDA[1][0][1], ... , $MDA[1][2][2] ], [ $MDA[2][0][0], $MDA[2][0][1], ... , $MDA[2][2][2] ], );
In other words, $AoA[x] contains all the elements of the form $MDA[x][*][*], if you follow my notation.

I don't see how this corresponds with your "Expected" data, but one thing I noticed is that you should make the following change:

# my $val = Dive( \@MDA, @indices ); # push @{$AoA[$level]}, @$val; my $val = Dive( $MDA[$level], @indices ); push @{$AoA[$level]}, $val;
Because when dealing with $AoA[$level], you only care about things starting form $MDA[$level]. Also, then $val will not be an arrayref like it was before.

There are many equivalent ways to write this, but another way is the following: Here you can replace the entire foreach loop with this:

NestedLoops( [ ( [0..$dimension-1] ) x ($depth-1) ], sub { my @indices = @_; my $val = Dive( \@MDA, @indices ); push @{ $AoA[$indices[0]] }, $val; } );
To explain this, it takes everything of the form $MDA[a][b][c] and pushes it onto the array at $AoA[a].

blokhead

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://625149]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2024-03-29 08:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found