in reply to flattening a list-of-lists
Cheers - L~R#!/usr/bin/perl -w use strict; my @array1 = ( 1 .. 10 ); my @array2 = ( qw(a b c) , [ 28, 42, 84 ] , 'foo bar' ); push @array1 , \@array2; push @array2 , \@array1; print join ' , ' , flatten(\@array1 , \@array2); sub flatten { my @stack = @_; my @flat; my %seen; $seen{$_} = 1 for @stack; while ( @stack ) { my $array = shift @stack; for my $element ( @$array ) { if ( ref $element eq 'ARRAY') { if ( ! $seen{$element} ) { $seen{$element} = 1; unshift @stack , $element; } } else { push @flat , $element; } } } return wantarray ? @flat : \@flat; }
Update: I asked for comments in the CB since this is the first time I have tried doing this:
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: flattening a list-of-lists
by demerphq (Chancellor) on Nov 19, 2003 at 19:24 UTC | |
by tye (Sage) on Nov 19, 2003 at 20:14 UTC | |
by demerphq (Chancellor) on Nov 19, 2003 at 22:39 UTC |