我想indices在一个单词中找到多个字母.我不想使用Regexes,因为它们会减慢程序的速度(这比我想要的要慢).
> "banana".indices(("a", "b").any)
any((1 3 5), (0))
Run Code Online (Sandbox Code Playgroud)
我怎么能得到0, 1, 3, 5?
我会选择这样的东西(在REPL中):
> gather "banana".indices("a"|"b").deepmap: *.take
(1 3 5 0)
Run Code Online (Sandbox Code Playgroud)
> "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)
我的解决方案是:
> <a b>.map( { |"banana".indices($_) } ).sort
(0 1 3 5)
Run Code Online (Sandbox Code Playgroud)
基本上,循环遍历你要查找的所有字母(<a b>.map)并将这些字母映射到它们的索引("banana".indices($_)),然后滑动索引found(|)并对结果(.sort)进行排序.