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

Re: How to flatten an x-dimensional array?

by AidanLee (Chaplain)
on Mar 12, 2002 at 03:24 UTC ( [id://151039]=note: print w/replies, xml ) Need Help??


in reply to How to flatten an x-dimensional array?

consider a recursive solution:
my @flattened_array = flatten($nested_array_ref); sub flatten { my $array = shift; my @results = (); foreach my $element ( @$array ) { if( ref $element eq 'ARRAY' ) { push @results, flatten($element); } elsif( $element ) { push @results, $element; } } return @results; }

update: I investigated per rob_au's concerns with the following code using the above subroutine:

use Data::Dumper; use strict; my $nested_array_ref = [ '', [ 'a', [ 'b', 'c' ], '', 'd' ], 'value' ]; my @flattened_array = flatten($nested_array_ref); print Dumper(\@flattened_array);

and my output was this:

$VAR1 = [ 'a', 'b', 'c', 'd', 'value' ];

the example i gave explicitly passed an array_ref into the function to begin with, and @results is local to the subroutine, and does not get blown away during recursion.

Replies are listed 'Best First'.
Re: Re: How to flatten an x-dimensional array?
by rob_au (Abbot) on Mar 12, 2002 at 03:43 UTC
    This doesn't appear to work, primarily because of the clearing of the @results array with each iteration through the flatten function - In addition to this, when called with a unreferenced array, an error is generated when run under strict because of the dereferencing of a string in the foreach loop (@$array).

    Update - Hrmmm, I'll dig into this a bit further and see why my tests failed - Thanks for the update AidanLee :-)

     

    perl -e 's&&rob@cowsnet.com.au&&&split/[@.]/&&s&.com.&_&&&print'

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2025-07-11 15:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.