可能重复:
ruby 数组元素分组
例子。给定数组 a:
a = [1, 2, 3]
它的长度是 3,所以我想打印所有 2 长度的数组。这些都是:
[1, 2]
[1, 3]
[2, 3]
我不知道 Ruby 中是否有一些方法可以获取子集数组。如果没有这样的方法,那么实现这一目标的最有效方法是什么。
可能重复:
ruby 数组元素分组
例子。给定数组 a:
a = [1, 2, 3]
它的长度是 3,所以我想打印所有 2 长度的数组。这些都是:
[1, 2]
[1, 3]
[2, 3]
我不知道 Ruby 中是否有一些方法可以获取子集数组。如果没有这样的方法,那么实现这一目标的最有效方法是什么。
这只是两个元素的简单组合:
>> xs = [1, 2, 3]
>> xs.combination(xs.size - 1).to_a
=> [[1, 2], [1, 3], [2, 3]]
[编辑] 正如@Joshua 在评论中指出的那样,文档声明不能保证订单(!)。所以这是一个功能实现,它按照您要求的顺序生成组合。为了完整起见,我将它作为原始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