2
實施例。給定數組a:
a = [1, 2, 3]
它的長度是3,所以我想打印所有2長度的數組。它們是:
[1, 2]
[1, 3]
[2, 3]
我不知道在Ruby中是否有一些方法來獲取子集數組。如果沒有這樣的方法,最有效的方法是實現這一點。
實施例。給定數組a:
a = [1, 2, 3]
它的長度是3,所以我想打印所有2長度的數組。它們是:
[1, 2]
[1, 3]
[2, 3]
我不知道在Ruby中是否有一些方法來獲取子集數組。如果沒有這樣的方法,最有效的方法是實現這一點。
這只是簡單的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
啊,但是文檔說_ [「的實施,使沒有關於該組合產生的順序保證」(HTTP:// rdoc.info/stdlib/core/Array:combination)_可能是OP的一個問題。 –
@JoshuaCheek:我承認我對這個警告感到莫名其妙... – tokland
我不在乎訂單。 –