Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
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 having a coffee break in the Monastery: (6)
As of 2024-04-25 08:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found