Search Perl 6中多针的索引
我想查找一个单词中多个字母的Search Perl 6中多针的索引,search,raku,Search,Raku,我想查找一个单词中多个字母的索引。我不想使用Regexes,因为它们会减慢程序的速度(这已经比我想要的慢了) >“香蕉”。索引((“a”、“b”)。任何) 任何((1 3 5)、(0)) 我怎样才能得到0,1,3,5?我会选择这样的东西(在REPL中): 我的解决办法是: > <a b>.map( { |"banana".indices($_) } ).sort (0 1 3 5) .map({|“banana”.index($|)}).sort (0 1 3 5) 基本
索引。我不想使用Regex
es,因为它们会减慢程序的速度(这已经比我想要的慢了)
>“香蕉”。索引((“a”、“b”)。任何)
任何((1 3 5)、(0))
我怎样才能得到0,1,3,5
?我会选择这样的东西(在REPL中):
我的解决办法是:
> <a b>.map( { |"banana".indices($_) } ).sort
(0 1 3 5)
.map({|“banana”.index($|)}).sort
(0 1 3 5)
基本上,循环所有要查找的字母(.map
)并将这些字母映射到它们的索引(“banana”.index($)
),然后滑动找到的索引(
)并对结果进行排序(.sort
)
我不知道在这种情况下,comb
是否使用regex
:
gather for 'banana'.comb.antipairs {.value.take if .key ∈ ['a','b'] }
# or
gather 'banana'.comb.antipairs».&{.value.take if .key ∈ ['a','b'] }
很好,但是OP说他不想使用正则表达式。@Håkon Hægland是“香蕉”。comb
等于“香蕉”。comb(/./)
对不起,我没在想。尽管名称grep
来自“global regexp”,但此处不使用regex<代码>“a”|“b”
只是两个字符的连接。我不确定comb
,但我看不出它应该使用regex的原因。实际上,comb
在内部不使用任何regex。它只是在字符串中的所有图形上创建了一个迭代器。你认为哪个版本最快?@EugeneBarsky今天最快的可能不是将来最快的。它也可能取决于您的特定数据。如果速度对您很重要,我建议您在您的机器上使用数据(或数据的代表性样本)尝试不同的方法。@ChristopherBottoms谢谢,我会尝试的。
> "banana".comb.grep: 'a' | 'b',:k
(0 1 3 5)
gather for 'banana'.comb.antipairs {.value.take if .key ∈ ['a','b'] }
# or
gather 'banana'.comb.antipairs».&{.value.take if .key ∈ ['a','b'] }