Perl 6 中多于一根针的索引
indices for more than one needle in Perl 6
我想为一个单词中的多个字母查找 indices
。我不想使用 Regex
es,因为它们会减慢程序速度(这已经比我想要的慢了)。
> "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'] }
我想为一个单词中的多个字母查找 indices
。我不想使用 Regex
es,因为它们会减慢程序速度(这已经比我想要的慢了)。
> "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'] }