2011-04-07 4 views
12

Je le tableau multidimensionnel suivant Ruby:Création permutations à partir d'un tableau multidimensionnel dans Ruby

[[1,2], [3], [4,5,6]] 

je dois avoir la sortie suivante:

[[1,3,4], [1,3,5], [1,3,6], [2,3,4], [2,3,5], [2,3,6]] 

J'ai essayé de créer une fonction récursive, mais je n'ai pas beaucoup de chance.

Y a-t-il des fonctions Ruby qui pourraient vous aider? Ou est la seule option pour le faire récursivement?

Merci

+3

Vous devez toujours montrer le code que vous avez essayé, même quand il didn ne fonctionne pas. Parfois, le correctif est un réglage mineur. D'autres fois, vous aurez d'autres solutions. Toujours, nous serons en mesure de dire si vous avez réellement essayé quelque chose ou si vous cherchez des réponses. –

Répondre

29

Eh oui, Array#product exactement ce que fait (Cartesian product):

a = [[1,2], [3], [4,5,6]] 
head, *rest = a # head = [1,2], rest = [[3], [4,5,6]] 
head.product(*rest) 
#=> [[1, 3, 4], [1, 3, 5], [1, 3, 6], [2, 3, 4], [2, 3, 5], [2, 3, 6]] 

Une autre variante:

a.inject(&:product).map(&:flatten) 
#=> [[1, 3, 4], [1, 3, 5], [1, 3, 6], [2, 3, 4], [2, 3, 5], [2, 3, 6]] 
Questions connexes