List::Utilで配列をシャッフルする
こないだ、List::Utilにshuffleがあるのを教えて貰ったので、
さっそく使ってみようと思う。(*1)
コードはこんな感じ。
use strict;
use warnings;
use v5.10;
use List::Util qw/shuffle/;
use Array::Shuffle qw/shuffle_array/;
use Benchmark qw/cmpthese/;
cmpthese( 5, {
Array_Shuffle => sub {
my @foo = 1..1_000_000;
shuffle_array( @foo );
},
List_Util => sub {
my @foo = shuffle( 1..1_000_000 );
}
} );
実行結果はこんな感じ。
$ perl aaa.pl
Rate List_Util Array_Shuffle
List_Util 2.72/s -- -27%
Array_Shuffle 3.70/s 36% --
コード書いてる時点で気付いたけど、
List::Utilの方は結果を受け取る分、ちょっと遅い。
でも現時点で、シャッフルする理由はソートの前準備だけなので、
CoreモジュールであるList::Utilの方を、積極的に使っていきたいと思う。
うーん、Array::Shuffleを使った方が良いケースかー、
ちょっと、思い付かないですね。
ちりも積もれば何とかっていう環境では使われてるんですかね?
おしまい。
(*1) akiymさん++
Leave a Comment