Created
October 28, 2012 06:34
-
-
Save mackee/3967880 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
use strict; | |
use warnings; | |
use utf8; | |
use DDP; | |
use 5.012; | |
use Benchmark qw/:all/; | |
my @numerals = qw/zero one two three four five six seven eight nine ten/; | |
cmpthese -1, { | |
'for and incremental index' => sub { | |
my %numeral_to_number = (); | |
my $i = 0; | |
for my $numeral (@numerals) { | |
$numeral_to_number{$numeral} = $i++; | |
} | |
}, | |
'for and 0..10' => sub { | |
my %numeral_to_number = (); | |
for my $value (0..10) { | |
$numeral_to_number{$numerals[$value]} = $value; | |
} | |
}, | |
'for and 0..scalar()' => sub { | |
my %numeral_to_number = (); | |
for my $value (0..@numerals-1) { | |
$numeral_to_number{$numerals[$value]} = $value; | |
} | |
}, | |
'for and keys' => sub { | |
my %numeral_to_number = (); | |
for my $number (keys @numerals) { | |
$numeral_to_number{$numerals[$number]} = $number; | |
} | |
}, | |
'while and each' => sub { | |
my %numeral_to_number = (); | |
while (my ($number, $numeral) = each(@numerals)) { | |
$numeral_to_number{$numeral} = $number; | |
} | |
}, | |
'map and shift' => sub { | |
my @numerals_copy = @numerals; | |
my %numeral_to_number = map { $_ => shift @numerals_copy } 0..10; | |
}, | |
'List::MoreUtil::zip' => sub { | |
use List::MoreUtils qw/zip/; | |
my @indexes = (0..10); | |
my %numeral_to_number = zip(@numerals, @indexes); | |
}, | |
}; | |
__END__ | |
Rate map and shift List::MoreUtil::zip while and each for and keys for and 0..scalar() for and 0..10 for and incremental index | |
map and shift 110276/s -- -14% -22% -40% -44% -46% -49% | |
List::MoreUtil::zip 128478/s 17% -- -9% -30% -35% -37% -41% | |
while and each 140894/s 28% 10% -- -23% -28% -31% -35% | |
for and keys 183794/s 67% 43% 30% -- -6% -10% -15% | |
for and 0..scalar() 196495/s 78% 53% 39% 7% -- -4% -9% | |
for and 0..10 204485/s 85% 59% 45% 11% 4% -- -6% | |
for and incremental index 216392/s 96% 68% 54% 18% 10% 6% -- |
kenjiskywalker
commented
Oct 28, 2012
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use DDP;
use 5.012;
use Benchmark qw/:all/;
my @numerals = qw/zero one two three four five six seven eight nine ten/;
cmpthese -1, {
'for and 0..10' => sub {
my %numeral_to_number = ();
for my $value (0..10) {
$numeral_to_number{$numerals[$value]} = $value;
}
},
'for and 0..scalar()' => sub {
my %numeral_to_number = ();
for my $value (0..@numerals-1) {
$numeral_to_number{$numerals[$value]} = $value;
}
},
'for and keys' => sub {
my %numeral_to_number = ();
for my $number (keys @numerals) {
$numeral_to_number{$numerals[$number]} = $number;
}
},
'while and each' => sub {
my %numeral_to_number = ();
while (my ($number, $numeral) = each(@numerals)) {
$numeral_to_number{$numeral} = $number;
}
},
'List::MoreUtil::zip' => sub {
use List::MoreUtils qw/zip/;
my @indexes = (0..10);
my %numeral_to_number = zip(@numerals, @indexes);
},
'map' => sub {
my @indexes = (0..10);
my @hoge = @numerals;
my %numeral_to_number = map { $_ => shift @hoge } @indexes;
},
};
__END__
Rate map while and each List::MoreUtil::zip for and keys for and 0..scalar() for and 0..10
map 75983/s -- -31% -32% -41% -54% -58%
while and each 109887/s 45% -- -2% -15% -34% -39%
List::MoreUtil::zip 111709/s 47% 2% -- -14% -33% -38%
for and keys 129152/s 70% 18% 16% -- -22% -28%
for and 0..scalar() 166134/s 119% 51% 49% 29% -- -8%
for and 0..10 180326/s 137% 64% 61% 40% 9% --
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment