for @$r -> $x, $y {
push @$pairs, [$x, $y];
}
####
my $r2;
my $flipper = 0;
for( @$r ) {
if( $flipper++ % 2 ) {
push @{$r2->[$#{$r2}]}, $_;
}
else {
push @$r2, [ $_ ];
}
}
##
##
my %h=(@$r);
for (keys %h) {
push @$r2, [$_, $h2{$_} ]
}
# or possibly
# push @$r2, [$_, $h2{$_} ] for keys %h
##
##
my $i = 0;
my $r2 = map {[ $r->[$i*2], $r->[$i++*2+1] ]}
(0 .. $#{$r}/2 - 1);
# or (0 .. scalar(@$r)/2 - 1)
##
##
for( my $i=0; $i < scalar @$r; $i += 2 ) {
$r2->[$i/2] = [ @$r[$i, $i+1] ]
}
##
##
my @copy = @$r;
for( @copy ) {
push @$r2, [ $_, shift @copy ];
}
##
##
my @copy = @$r;
while( @copy ) {
push @$r2, [ shift @c, shift @c ];
}
##
##
$r2 = [ map { [$r->[2*$_], $r[2*$_+1]] } 0 .. scalar @$r / 2 - 1 ]
##
##
$r2 = [ map { [@$r[2*$_, 2*$_+1]] } 0 .. scalar @$r / 2 - 1 ]
##
##
@copy = @$r;
while (my @pair = splice @copy, 0, 2) {
push @$r2, [@pair];
}
##
##
#! /usr/bin/perl -w
use strict;
use Benchmark qw/cmpthese/;
use Data::Dumper;
$Data::Dumper::Indent = 0;
my $iters = shift || 1000;
my $len = shift || 8;
sub flipper {
my @r2;
my $flipper = 0;
for( @_ ) {
if( $flipper++ % 2 ) {
push @{$r2[$#r2]}, $_;
}
else {
push @r2, [ $_ ];
}
}
\@r2;
}
sub map_i {
my $i = 0;
[ map { [$_[$i*2], $_[$i++*2+1]] } (0 .. scalar(@_)/2 - 1) ];
}
sub shifter {
my @r2;
while( @_ ) {
push @r2, [ shift @_, shift @_ ];
}
\@r2;
}
sub c_loop {
my @r2;
for( my $i=0; $i < scalar @_; $i += 2 ) {
push @r2, [ @_[$i, $i+1] ]
}
\@r2;
}
sub map_pure {
[ map{ [$_[$_*2], $_[$_*2+1]] } (0 .. scalar @_ / 2 - 1) ];
}
sub aslice {
my @r2;
$r2[$_] = [ @_[$_*2, $_*2+1] ] for (0 .. scalar @_ / 2 - 1);
\@r2;
}
sub map_jm {
[ map { [$_[2*$_], $_[2*$_+1]] } 0 .. scalar @_ / 2 - 1 ];
}
sub map_jm2 {
[ map { [@_[2*$_, 2*$_+1]] } 0 .. scalar @_ / 2 - 1 ];
}
sub splicer {
my @r2;
while (my @pair = splice @_, 0, 2) {
push @r2, [@pair];
}
\@r2;
}
######################################################
my $r = [ 1 .. $len ];
for my $sub( qw/ flipper shifter splicer c_loop aslice
map_i map_pure map_jm map_jm2 /) {
no strict 'refs';
# test
# print "$sub ", Dumper( &$sub( @$r )), "\n";
}
cmpthese(
$iters,
{
flipper => sub { flipper( @$r )},
shifter => sub { shifter( @$r )},
splicer => sub { splicer( @$r )},
c_loop => sub { c_loop( @$r )},
aslice => sub { aslice( @$r )},
map_i => sub { map_i( @$r )},
map_pure => sub { map_pure( @$r )},
map_jm => sub { map_jm( @$r )},
map_jm2 => sub { map_jm2( @$r )},
},
);
__END__