【发布时间】:2018-04-13 13:38:06
【问题描述】:
我经常需要过滤包含一些子字符串(例如一个字符)的字符串array 的元素。因为它可以通过匹配regex 或.contains 方法来完成,所以我决定做一个小测试以确保.contains 更快(因此更合适)。
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 很棒的工具!但恐怕我无法解释结果。
标签: raku