サブストリング(たとえば1文字)を含むarray
の文字列の要素をフィルタ処理することがよくあります。 regex
と一致させるか、.contains
の方法を使って行うことができますので、私は小さなテストをして.contains
がより速く(したがってより適切である)ことを確認しました。正規表現とPerlでのフィルタリング。
my @array = "aa" .. "cc";
my constant $substr = 'a';
my $time1 = now;
my @a_array = @array.grep: *.contains($substr);
my $time2 = now;
@a_array = @array.grep: * ~~ /$substr/;
my $time3 = now;
my $time_contains = $time2 - $time1;
my $time_regex = $time3 - $time2;
say "contains: $time_contains sec";
say "regex: $time_regex sec";
それから@array
の大きさと$substr
の長さを変更し、各方法は@array
をフィルタリングするために要した時間を比較します。ほとんどの場合(予想どおり)、.contains
は、regex
よりもはるかに速く、特に@array
が大きい場合は。しかし、@array
(上記のコードのように)が小さい場合は、regex
がやや速くなります。
contains: 0.0015010 sec
regex: 0.0008708 sec
どうしてですか?
'perl6 --profile example.p6' –
@BradGilbert素晴らしいツール!しかし、私は結果を解釈することはできません。 –