Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Depth of AoAs

by CharlesClarkson (Curate)
on Jan 14, 2002 at 10:17 UTC ( #138529=snippet: print w/ replies, xml ) Need Help??

Description:

I have no clue why anyone might need this. I created it while answering a question about multidimensional arrays. It is my first successful recursive sub.

    sub depth {
        my $arr = shift;
        return 1 unless ref $$arr[0] eq 'ARRAY';
        return depth( $$arr[0] ) + 1;
    }

Call it with a reference to your array of arrays structure

print depth( \@array );

Update: Changed the fourth line to indicate the correct sub.

Comment on Depth of AoAs
Select or Download Code
Re: Depth of AoAs
by rob_au (Abbot) on Jan 14, 2002 at 10:33 UTC
    There are two small problems with this code - The first is that you have called the subroutine depth yet reference it within the subroutine as dimensions. Has anyone ever told you that recursion is evil? :-)

    Also, if the subroutine is called with something other than an array reference, it still returns a count of 1.

     

    Update

    This code addresses the issues above and returns the correct reference depth of the array.

    sub depth { return 0 unless ref $_[0] eq 'ARRAY'; return depth( ${$_[0]}[0] ) + 1; }

    Or alternatively, without recursion ...

    sub depth { my $array = shift; my $count = 0; while (ref $array eq 'ARRAY') { $array = ${$array}[0]; ++$count; } return $count; }

     

    Update

    Okay ... So I was curious and went ahead and benchmarked these subroutines and was pleasantly surprised with the result.

    Benchmark: timing 100000 iterations of loop, recursion... loop: 6 wallclock secs ( 5.30 usr + 0.00 sys = 5.30 CPU) @ 18 +867.92/s (n=100000) recursion: 6 wallclock secs ( 5.87 usr + 0.00 sys = 5.87 CPU) @ 17 +035.78/s (n=100000)

     

Re: Depth of AoAs
by merlyn (Sage) on Jan 15, 2002 at 02:50 UTC

Back to Snippets Section

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2014-12-20 15:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (96 votes), past polls