Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Destructive Unmerge List

by CharlesClarkson (Curate)
on Feb 06, 2002 at 10:07 UTC ( [id://143591]=CUFP: print w/replies, xml ) Need Help??

This routine unmerges a list into more than one list, but destroys the original list. A non-destructive version is available.

my @arr = qw ( apples oranges bananas pears berries apricots peaches ) +; my @arr_of_columns = unmerge_list_d( \@arr, 2 );
giving us:
['apples', 'bananas','berries', 'prunes'] ['oranges','pears', 'apricots']

If you want to pad the end of uneven arrays place the padding as the third argument

my $arr_of_arr = unmerge_list_d( [ 1 .. 7 ], 3, 'goofy' ); which yields:
[ [1, 4, 7] [2, 5, 'goofy'] [3, 6, 'goofy'] ]

I don't know if unmerge_list_d will allow very large arrays to be unmerged, but it should help reduce memory usage.

sub unmerge_list_d { my ( $list_ref, $qty, $pad ) = @_; return unless ref $list_ref eq 'ARRAY'; my $arr; push @$arr, [] for 1 .. $qty; if ( @$list_ref % $qty && @_ > 2) { my $padded = $qty - @$list_ref % $qty ; push @{ $list_ref }, ($pad) x $padded; } LOOP: while (1) { foreach ( @$arr ) { push @{ $_ }, shift @$list_ref; last LOOP unless @$list_ref; } } return @$arr if wantarray; return $arr; }

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-19 05:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found