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'] }