Quels sont les équivalents Ruby des itertools Python, en particulier.combinaisons/permutations/groupby ?

StackOverflow https://stackoverflow.com/questions/2443230

Question

Les Pythons itertools Le module fournit de nombreux avantages en ce qui concerne le traitement d'un itérable/itérateur à l'aide de générateurs.Par exemple,

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

Quels sont les équivalents en Ruby ?

Par équivalent, j'entends rapide et efficace en mémoire (le module itertools de Python est écrit en C).

Était-ce utile?

La solution

Array#permutation, Array#combination et Enumerable#group_by sont définis en rubis depuis la 1.8.7.Si vous utilisez la version 1.8.6, vous pouvez obtenir des méthodes équivalentes auprès de facettes ou active_support ou rétroportages.

Exemple d'utilisation :

[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]}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top