我有一个多维数组:
a=[[2,3,4],[1,3,4],[1,2],[1,2,3,4]]
我必须比较所有 4 个子数组并获得共同元素。接下来,一次取 3 个子数组并获得共同元素。然后一次取 2 个子数组并获得共同元素,在 RUBY 中。
我有一个多维数组:
a=[[2,3,4],[1,3,4],[1,2],[1,2,3,4]]
我必须比较所有 4 个子数组并获得共同元素。接下来,一次取 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]]]
这是具有类似解决方案的相关问题。“技巧”在方法Array#&
中,它计算两个数组的交集(作为集合操作)。它是关联操作,因此我们可以将它依次应用于每个子数组,保留累积的结果,因此inject
非常适合它。简而言之,array.inject(&:&)
将导致array
. &:&
只是一个 Ruby 简写,用于制作一个Proc
名为 out 的方法&
并将其作为一个块提交给inject
,而不是编写:
array.inject{|a,e| a & e}