Created
August 17, 2011 08:44
-
-
Save toritori0318/1151111 to your computer and use it in GitHub Desktop.
perl : 配列から値検索ベンチマーク
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
| use strict; | |
| use warnings; | |
| use Data::Dumper; | |
| use List::Util qw/first shuffle/; | |
| use Benchmark qw(timethese cmpthese); | |
| use 5.10.0; | |
| my $count = shift || 1; | |
| my $dbg = ($count == 1) ? 1 : undef; | |
| my $grep = 'apple'; | |
| my @array1 = ('a'..'z', 'A'..'Z', 'apple', 'mango', 'orange'); | |
| @array1 = shuffle(@array1); | |
| my $comp = timethese( | |
| $count, | |
| { | |
| list1 => sub {list1();}, | |
| list2 => sub {list2();}, | |
| list3 => sub {list3();}, | |
| list4 => sub {list4();}, | |
| list5 => sub {list5();}, | |
| } | |
| ); | |
| warn Dumper (\@array1) if $dbg; | |
| cmpthese $comp; | |
| sub list1 { | |
| foreach my $r (@array1) { | |
| if($r eq $grep){ | |
| say "hit1!" if $dbg; | |
| last; | |
| } | |
| } | |
| } | |
| sub list2 { | |
| if(grep /^$grep$/, @array1){ | |
| say "hit2!" if $dbg; | |
| }; | |
| } | |
| sub list3 { | |
| if(grep {$_ eq $grep} @array1){ | |
| say "hit3!" if $dbg; | |
| }; | |
| } | |
| sub list4 { | |
| given ($grep) { | |
| when (@array1) { | |
| say "hit4!" if $dbg; | |
| } | |
| } | |
| } | |
| sub list5 { | |
| if($grep ~~ \@array1){ | |
| say "hit5!" if $dbg; | |
| }; | |
| } | |
| __DATA__ | |
| % perl -v | |
| This is perl 5, version 14, subversion 1 (v5.14.1) built for darwin-2level | |
| Copyright 1987-2011, Larry Wall | |
| Perl may be copied only under the terms of either the Artistic License or the | |
| GNU General Public License, which may be found in the Perl 5 source kit. | |
| Complete documentation for Perl, including FAQ lists, should be found on | |
| this system using "man perl" or "perldoc perl". If you have access to the | |
| Internet, point your browser at http://www.perl.org/, the Perl Home Page. | |
| % perl list_grep.pl 300000 | |
| Benchmark: timing 300000 iterations of list1, list2, list3, list4, list5... | |
| list1: 1 wallclock secs ( 0.71 usr + 0.01 sys = 0.72 CPU) @ 416666.67/s (n=300000) | |
| list2: 5 wallclock secs ( 4.95 usr + 0.01 sys = 4.96 CPU) @ 60483.87/s (n=300000) | |
| list3: 2 wallclock secs ( 1.91 usr + 0.00 sys = 1.91 CPU) @ 157068.06/s (n=300000) | |
| list4: 1 wallclock secs ( 0.52 usr + 0.00 sys = 0.52 CPU) @ 576923.08/s (n=300000) | |
| list5: 0 wallclock secs ( 0.45 usr + 0.00 sys = 0.45 CPU) @ 666666.67/s (n=300000) | |
| Rate list2 list3 list1 list4 list5 | |
| list2 60484/s -- -61% -85% -90% -91% | |
| list3 157068/s 160% -- -62% -73% -76% | |
| list1 416667/s 589% 165% -- -28% -38% | |
| list4 576923/s 854% 267% 38% -- -13% | |
| list5 666667/s 1002% 324% 60% 16% -- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment