2010-08-05 32 views
7

Tôi đang tìm cách tìm tất cả các kết hợp của các mục đơn lẻ từ một số mảng biến. Làm thế nào để tôi làm điều này trong Ruby?Tìm sản phẩm của một số biến mảng Ruby

Với hai mảng, tôi có thể sử dụng Array.product như thế này:

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

Làm thế nào có thể làm việc mã này khi nhóm chứa một số biến của mảng?

Trả lời

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

Ồ, cảm ơn. Bạn, hoặc ai đó, có thể giải thích cách thức hoạt động của nó? –

+2

Một giải thích về điều này thực sự sẽ hữu ích quá, và có thể dẫn đến thiết kế tốt hơn mã OP ... – jtbandes

+1

@Ollie: 'Mảng # sản phẩm' có thể lấy nhiều mảng làm đối số, do đó, điều này chỉ đơn giản là làm' nhóm [0] .product (nhóm [1], nhóm [2], ...) ' – jtbandes

Các vấn đề liên quan