Perl 6中多个针的指数

Eug*_*sky 9 search perl6

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

> "banana".indices(("a", "b").any)
any((1 3 5), (0))
Run Code Online (Sandbox Code Playgroud)

我怎么能得到0, 1, 3, 5

nxa*_*adm 9

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

> gather "banana".indices("a"|"b").deepmap: *.take
(1 3 5 0)
Run Code Online (Sandbox Code Playgroud)


che*_*nyf 8

> "banana".comb.grep: 'a' | 'b',:k
(0 1 3 5)
Run Code Online (Sandbox Code Playgroud)

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

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

# or
gather 'banana'.comb.antipairs».&{.value.take if .key ? ['a','b'] }  
Run Code Online (Sandbox Code Playgroud)


Eli*_*sen 7

我的解决方案是:

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

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

  • @EugeneBarsky今天最快的可能不是未来最快的.它也可能取决于您的特定数据.如果速度对您很重要,我建议您使用数据(或数据的代表性样本)尝试机器上的不同方法. (3认同)