индексы для более чем одной иглы в Perl 6 - PullRequest
0 голосов
/ 12 мая 2018

Я хочу найти indices для более чем одной буквы в слове.Я не хочу использовать Regex es, потому что они будут замедлять программу (что уже медленнее, чем я хотел).

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

Как мне вместо этого получить 0, 1, 3, 5?

Ответы [ 3 ]

0 голосов
/ 12 мая 2018

Мое решение будет:

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

По существу, обведите все буквы, которые вы хотите найти (<a b>.map), и сопоставьте эти буквы с их индексами ("banana".indices($_)), затем подсуньте найденные индексы (|) и отсортируйте результат (.sort).

0 голосов
/ 12 мая 2018
> "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'] }  
0 голосов
/ 12 мая 2018

Я бы пошел на что-то вроде этого (в REPL):

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