Что Ruby эквивалентны из Python itertools, особенно combinations/permutations/groupby?

itertools модуль Python предоставляет большому количеству положительных героев относительно обработки повторяемого / итератора при помощи генераторов. Например,

permutations(range(3)) --> 012 021 102 120 201 210

combinations('ABCD', 2) --> AB AC AD BC BD CD

[list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D

Каков эквивалент в Ruby?

Эквивалентом я имею в виду быстро, и эффективная память (itertools модуль Python записан в C).

13
задан Hai-Anh Trinh 14 March 2010 в 18:32
поделиться

1 ответ

Перестановка # массива , Комбинация # массива и Перечислимый # group_by определены в ruby, начиная с версии 1.8.7. Если вы используете 1.8.6, вы можете получить эквивалентные методы из фасетов, active_support или backports .

Пример использования:

[0,1,2].permutation.to_a
#=> [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]

[0,1,2,3].combination(2).to_a
#=> [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]

[0,0,0,1,1,2].group_by {|x| x}.map {|k,v| v}
#=> [[0, 0, 0], [1, 1], [2]]

[0,1,2,3].group_by {|x| x%2}
#=> {0=>[0, 2], 1=>[1, 3]}
18
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: