2010-08-05 4 views
7

Je cherche à trouver toutes les combinaisons d'éléments uniques à partir d'un nombre variable de tableaux. Comment est-ce que je fais ceci dans Ruby?Trouver le produit d'un nombre variable de tableaux Ruby

Étant donné deux tableaux, je peux utiliser Array.product comme ceci:

groups = [] 
groups[0] = ["hello", "goodbye"] 
groups[1] = ["world", "everyone"] 

combinations = groups[0].product(groups[1]) 

puts combinations.inspect 
# [["hello", "world"], ["hello", "everyone"], ["goodbye", "world"], ["goodbye", "everyone"]] 

Comment ce travail de code pourrait lorsque des groupes contient un nombre variable de tableaux?

Répondre

13
groups = [ 
    %w[hello goodbye], 
    %w[world everyone], 
    %w[here there] 
] 

combinations = groups.first.product(*groups.drop(1)) 

p combinations 
# [ 
# ["hello", "world", "here"], 
# ["hello", "world", "there"], 
# ["hello", "everyone", "here"], 
# ["hello", "everyone", "there"], 
# ["goodbye", "world", "here"], 
# ["goodbye", "world", "there"], 
# ["goodbye", "everyone", "here"], 
# ["goodbye", "everyone", "there"] 
# ] 
+1

Wow, merci. Pourriez-vous, ou quelqu'un, éventuellement expliquer comment cela fonctionne? –

+2

Une explication de ce que cela fait réellement serait utile aussi, et conduirait probablement à une meilleure conception du code de l'OP ... – jtbandes

+1

@Ollie: 'Array # product' peut prendre plusieurs tableaux comme arguments, donc c'est simplement faire des' groupes ' [0] .product (groupes [1], groupes [2], ...) ' – jtbandes

Questions connexes