任意数量的数组的交集

时间:2015-09-27 22:02:06

标签: arrays ruby

我需要一个以数组数组作为参数的函数,然后返回所有子数组的交集。如果有的话,我怎么能改进以下代码?

class Array
  def grand_intersection
    if self.length > 1
      filters = self[1..-1]
      filters.reduce(self[0]) {|start, filter| start & filter}
    else
      self
    end
  end
end

P.S。我不太关心处理其内容不会响应#& - 该方法不会向用户公开。

1 个答案:

答案 0 :(得分:4)

class Array
  def grand_intersection
    self.reduce :&
  end
end

[[1,2,3,4,5], [2,3,4], [1,2,4,5]].grand_intersection
  #=> [2, 4]