2010-08-05 16 views
7

Tek bir öğenin tüm kombinasyonlarını değişken sayıda diziden bulmak için arıyorum. Bunu Ruby'de nasıl yaparım?Değişken sayıda dizinin ürününü bulmak

Verilen iki diziler, böyle Array.product kullanabilirsiniz:

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"]] 

nasıl olabilir grupları diziler değişken sayıda içeren bu kod çalışır?

cevap

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

Vay, teşekkür ederim. Bunun nasıl olabileceğini açıklayabilir misiniz? –

+2

Bunun aslında ne işe yaradığını anlatan bir açıklama ve muhtemelen OP'nin kodunun daha iyi tasarımına yol açıyor ... – jtbandes

+1

@Ollie: 'Array # ürünü argüman olarak birden fazla dizi alabilir, bu sadece temelde grup yapıyor [0] .product (gruplar [1], gruplar [2], ...) ' – jtbandes