http://www.perlmonks.org?node_id=103512


in reply to Re: Fun with two-dimensional arrays
in thread Fun with two-dimensional arrays

I guess I obscured my question with too much detail about the problem. I'm asking mostly to satisfy my curiosity.

Without all the

$vscr
baggage, my question is: given an array of arrays (of arbitrary dimensions), how do you hit every element, first visiting the first element in each array, then the second, and so on?

For instance, if you had:

my $array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
you'd want to visit in the order 1, 4, 7, 2, 5, 8, 3, 6, 9.

Did that make sense?

update: why @ (in scalar context) and $# didn't occur to me when I posted this, I don't know. That said, mapcar is damn cool.

Replies are listed 'Best First'.
Re: Re: Re: Fun with two-dimensional arrays
by George_Sherston (Vicar) on Aug 10, 2001 at 04:59 UTC
    Why not cycle through the top-level array, shifting off the bottom element in each sub-array? Something like
    @array = ([1,2,3],[4,5,6],[7,8,9]); while (grep scalar @{ $_ }, @array) { for $i (@array) { print shift @{ $i }; } }
    This has the merit that not only do you not need to code (or even initialise, or know) the number and length of sub-arrays, but they can also be of different lengths.

    George Sherston
Re: Re: Re: Fun with two-dimensional arrays
by bikeNomad (Priest) on Aug 09, 2001 at 21:23 UTC
    Assuming you have fixed-size subarrays, you can do this:

    my $columns = 3; foreach my $x (0 .. $columns - 1) { foreach my $y (0 .. $#array) { print $array->[$y]->[$x] } }
    update: went back and re-read question.