2010-08-05 6 views
7

Я ищу, чтобы найти все комбинации отдельных элементов из числа переменных массивов. Как это сделать в Ruby?Поиск продукта с переменным количеством массивов Ruby

Даны два массив, я могу использовать Array.product так:

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

Как этот код работать, когда группа содержит переменное число массивов?

ответ

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

Ничего себе, спасибо. Не могли бы вы или кто-нибудь объяснить, как это работает? –

+2

Объяснение того, что это на самом деле может быть полезно, и, вероятно, приведет к лучшему дизайну кода OP ... – jtbandes

+1

@Ollie: 'Array # product' может принимать несколько массивов в качестве аргументов, так что это просто в основном выполнение групп [0] .product (groups [1], groups [2], ...) ' – jtbandes

Смежные вопросы