代码之家  ›  专栏  ›  技术社区  ›  Eugene Barsky

Perl 6中多针的索引

  •  9
  • Eugene Barsky  · 技术社区  · 8 年前

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

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

    我怎样才能取而代之 0, 1, 3, 5 ?

    3 回复  |  直到 8 年前
        1
  •  9
  •   nxadm    8 年前

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

    > gather "banana".indices("a"|"b").deepmap: *.take
    (1 3 5 0)
    
        2
  •  8
  •   chenyf    8 年前
    > "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'] }  
    
        3
  •  7
  •   Elizabeth Mattijsen    8 年前

    我的解决方案是:

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

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

    推荐文章