pgblu
pgblu

Reputation: 702

Intersection of an arbitrary number of arrays

I need a function which takes an array of arrays as its argument, then returns the intersection of all the subarrays. How could I improve the following code, if at all?

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. I'm not too concerned about handling arrays whose content won't respond to #& -- the method won't be exposed to the user.

Upvotes: 2

Views: 102

Answers (1)

Cary Swoveland
Cary Swoveland

Reputation: 110675

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] 

Upvotes: 4

Related Questions