Perl 6 中多于一根针的索引

indices for more than one needle in Perl 6

我想为一个单词中的多个字母查找 indices。我不想使用 Regexes,因为它们会减慢程序速度(这已经比我想要的慢了)。

> "banana".indices(("a", "b").any)
any((1 3 5), (0))

我怎样才能得到 0, 1, 3, 5

我会选择这样的东西(在 REPL 中):

> gather "banana".indices("a"|"b").deepmap: *.take
(1 3 5 0)

我的解决方案是:

> <a b>.map( { |"banana".indices($_) } ).sort
(0 1 3 5)

基本上,循环遍历您要查找的所有字母 (<a b>.map) 并将这些字母映射到它们的索引 ("banana".indices($_)),然后滑动找到的索引 (|) 并对结果进行排序 (.sort).

> "banana".comb.grep: 'a' | 'b',:k
(0 1 3 5)

不知道comb在这种情况下是否使用regex:

gather for 'banana'.comb.antipairs  {.value.take if .key ∈ ['a','b'] } 

# or
gather 'banana'.comb.antipairs».&{.value.take if .key ∈ ['a','b'] }