Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Answer: How cand I find each dimension x,y,z of a 3D arrays

by jeroenes (Priest)
on Apr 09, 2001 at 14:58 UTC ( #70969=categorized answer: print w/replies, xml ) Need Help??

Q&A > arrays > How cand I find each dimension x,y,z of a 3D arrays - Answer contributed by jeroenes

This code will recurse through the elements, and print the number of array-elements for each array in your structure. Will not decent hashes but can be hacked a bit to do that as well.
use strict; my @a = ([([0..3] ) x 4]) x 3; arraylength( \@a ); sub arraylength{ my $a = shift; my $dim = 0; _length( $a, $dim ); } sub _length{ my $a = shift; my $dim = shift; if ( ref( $a ) =~ /ARRAY/ ){ print "\t" x $dim; print "dim $dim -> ".(scalar @$a)." elements"; print "\n\n" if $dim == 0; print "\n" if $dim == 1; _length( $_, $dim + 1) for ( @$a ); print "\n"; } }
This example prints:
dim 0 -> 3 elements dim 1 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 1 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 1 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements

Replies are listed 'Best First'.
Re: Answer: How cand I find each dimension x,y,z of a 3D arrays
by ton (Friar) on Apr 09, 2001 at 20:57 UTC
    Very cool. But can I make one small suggestion? Use this function for length:
    sub _length{ my $a = shift; my $dim = shift; if ( ref( $a ) =~ /ARRAY/ ){ print "\t" x $dim; print "dim $dim -> ".(scalar @$a)." elements"; print "\n" if $dim == 0; print "\n"; _length( $_, $dim + 1) for ( @$a ); } }
    It's exactly the same logic, but prints newlines a little differently. Otherwise, you don't get the nice formatting for arrays with four or more dimensions.
Log In?
Username:
Password:

What's my password?
Create A New User
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (3)
As of 2021-03-09 00:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favorite kind of desktop background is:











    Results (129 votes). Check out past polls.

    Notices?