2011-04-07 147 views
12
創建從一個多維陣列排列

我有紅寶石以下多維數組:在紅寶石

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

我需要有下面的輸出:

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

我試圖創建遞歸函數,但我沒有太多的運氣。

是否有任何Ruby功能可以幫助解決這個問題?或者是遞歸執行它的唯一選擇?

感謝

+3

你應該總是告訴你已經嘗試了代碼,即使沒沒有工作。有時候修正是一個小調整。其他時候,你會得到替代解決方案。總是,我們可以告訴你是否真的嘗試過某種東西,或者只是在尋找答案。 – 2011-04-07 14:21:33

回答

29

是啊,Array#product做到了這一點(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]] 

另一個變化:

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