14

Python のitertoolsモジュールは、ジェネレーターを使用した iterable/iterator の処理に関して多くの機能を提供します。例えば、

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で同等のものは何ですか?

同等とは、高速でメモリ効率が高いことを意味します (Python の itertools モジュールは C で記述されています)。

4

1 に答える 1

20

Array#permutationArray#combinationおよびEnumerable#group_by1.8.7 以降の ruby​​ で定義されています。1.8.6 を使用している場合は、 facets または 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]}
于 2010-03-14T18:43:43.197 に答える