2012-09-06 87 views

回答

5

這只是簡單的2的combination要素:作爲@Joshua在評論中指出

>> xs = [1, 2, 3] 
>> xs.combination(xs.size - 1).to_a 
=> [[1, 2], [1, 3], [2, 3]] 

[編輯],該文檔聲明的順序不能保證(!)。所以這裏是一個功能實現,它可以按照您要求的順序生成組合。爲了完整起見,我會讓它懶作爲原始combination方法:

require 'enumerable/lazy' 

class Array 
    def combinations_of(n) 
    if n == 0 
     [[]].lazy 
    else 
     0.upto(self.size - 1).lazy.flat_map do |idx| 
     self.drop(idx + 1).combinations_of(n - 1).map do |xs| 
      [self[idx]] + xs 
     end 
     end  
    end 
    end 
end 
+1

啊,但是文檔說_ [「的實施,使沒有關於該組合產生的順序保證」(HTTP:// rdoc.info/stdlib/core/Array:combination)_可能是OP的一個問題。 –

+0

@JoshuaCheek:我承認我對這個警告感到莫名其妙... – tokland

+0

我不在乎訂單。 –