【发布时间】:2017-10-25 13:32:23
【问题描述】:
我想过滤以@search 元素开头的@array 元素:
my @array = "aaaaa" .. "fffff";
my @search = "aaaa" .. "cccc";
.put for @array .grep: /^ @search /;
问题是它需要 19 秒。所以,我把'precompile'regex换成grep,整个程序是这样的:
my @array = "aaaaa" .. "fffff";
my @search = "aaaa" .. "cccc";
my $search = "/@search.join('|')/".EVAL;
.put for @array .grep: * ~~ /^ <$search> /;
现在需要 0.444 秒。
问题:有没有内置的 Perl 6 方法来做这些事情?类似于将junction 插入regex...
【问题讨论】:
-
您所说的“为之工作”是什么意思?这么长时间后它会崩溃吗?
-
.put for @array .grep: @search.any; -
@BradGilbert 输出将是错误的。例如。
faaaa将被过滤,但不应该。过滤后的元素应以来自@search的字符串开始。 (即我正在寻找regexes的解决方案) -
@BradGilbert:你必须用 grep 搜索
*.starts-with(@search.any) -
@Christoph 哦,是的,这解决了这个特殊情况,这是我的错。 :) 虽然我正在寻找更通用的东西来将字符串合并到
regex。
标签: raku