in reply to Processing pairs of values from even-sized array
I'd normally use a slightly simpler version of JohnGG's splice approach. Something like
my @arr = qw/1 2 3 4 5 6 7 8/; while(my ($x,$y) = splice @arr,0,2) { say "$x => $y"; }
Something I've needed in the past was to get two arrays (odds and evens). Grep can do this. You could combine them into a hash thus:
Gives us:my @arr = qw/1 2 3 4 5 6 7 8/; my ($j,$i)=(0,0); my ($x,$y) = ([grep { ++$i % 2} @arr] , [grep {$j++ % 2} @arr]); my %hash; @hash{@{$x}}=@{$y}; for(keys %hash) { say "$_ => $hash{$_}" }
Or you could iterate them (which is safer if some x may be undef)1 => 2 3 => 4 7 => 8 5 => 6
Obviously that doesn't scale to big arrays. I'm sure List::MoreUtils is always the better approach.my @arr = qw/1 2 3 4 5 6 7 8/; push @arr, undef; push @arr, 9; my ($j,$i)=(0,0); my ($x,$y) = ([grep { ++$i % 2} @arr] , [grep {$j++ % 2} @arr]); $i=0; for(@{$x}){ say $_ ." => " . $y->[$i++] if($_); }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Processing pairs of values from even-sized array
by johngg (Canon) on Jun 03, 2011 at 21:54 UTC | |
by AnomalousMonk (Archbishop) on Jun 04, 2011 at 05:14 UTC | |
by johngg (Canon) on Jun 05, 2011 at 23:19 UTC | |
by AnomalousMonk (Archbishop) on Jun 06, 2011 at 14:41 UTC |
In Section
Seekers of Perl Wisdom