2
我有一個多維數組:找到一套從多維數組的共同要素的遞歸
a=[[2,3,4],[1,3,4],[1,2],[1,2,3,4]]
我比較所有的4子陣列,並得到普遍elements.Next,取3個子數組,並獲得相同的元素,然後每次取2個子數組,並獲得通用元素,如RUBY。
我有一個多維數組:找到一套從多維數組的共同要素的遞歸
a=[[2,3,4],[1,3,4],[1,2],[1,2,3,4]]
我比較所有的4子陣列,並得到普遍elements.Next,取3個子數組,並獲得相同的元素,然後每次取2個子數組,並獲得通用元素,如RUBY。
這應該做的工作,最近的Ruby版本:
a.length.downto(1).map{|i| a.combination(i).map{|sub| sub.inject(&:&)}}
#=> [[[]], [[], [3, 4], [2], [1]], [[3, 4], [2], [2, 3, 4], [1], [1, 3, 4], [1, 2]], [[2, 3, 4], [1, 3, 4], [1, 2], [1, 2, 3, 4]]]
Here's有類似的解決方案相關的問題。 「技巧」在方法Array#&
中,該方法計算兩個陣列的交集(作爲集合操作)。這是associative操作,所以我們可以將它應用在每個子陣列上,保持累積結果,因此inject
是完美的。簡而言之,array.inject(&:&)
將帶來array
的每個成員中最大的元素子集。 &:&
僅僅是一個Ruby速記用於製造Proc
了名爲&
方法,並利用它作爲一個塊inject
,而不是寫:
array.inject{|a,e| a & e}
@Mladen,Jablonović,這是一個赫然優雅的解決方案。你能稍微更新一下你的答案來解釋一下它是如何工作的。具體來說,'&:&'是什麼,它是如何與'Enumerable#inject'一起工作的? – 2010-04-06 17:59:15