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?

```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]
}
}