How can I get the intersection, union, and subset of arrays in Ruby? How can I get the intersection, union, and subset of arrays in Ruby? ruby ruby

How can I get the intersection, union, and subset of arrays in Ruby?


I assume X and Y are arrays? If so, there's a very simple way to do this:

x = [1, 1, 2, 4]y = [1, 2, 2, 2]# intersectionx & y            # => [1, 2]# unionx | y            # => [1, 2, 4]# differencex - y            # => [4]

Source


Utilizing the fact that you can do set operations on arrays by doing &(intersection), -(difference), and |(union).

Obviously I didn't implement the MultiSet to spec, but this should get you started:

class MultiSet  attr_accessor :set  def initialize(set)    @set = set  end  # intersection  def &(other)    @set & other.set  end  # difference  def -(other)    @set - other.set  end  # union  def |(other)    @set | other.set  endendx = MultiSet.new([1,1,2,2,3,4,5,6])y = MultiSet.new([1,3,5,6])p x - y # [2,2,4]p x & y # [1,3,5,6]p x | y # [1,2,3,4,5,6]


If Multiset extends from the Array class

x = [1, 1, 2, 4, 7]y = [1, 2, 2, 2]z = [1, 1, 3, 7]

UNION

x.union(y)           # => [1, 2, 4, 7]      (ONLY IN RUBY 2.6)x.union(y, z)        # => [1, 2, 4, 7, 3]   (ONLY IN RUBY 2.6)x | y                # => [1, 2, 4, 7]

DIFFERENCE

x.difference(y)      # => [4, 7] (ONLY IN RUBY 2.6)x.difference(y, z)   # => [4] (ONLY IN RUBY 2.6)x - y                # => [4, 7]

INTERSECTION

x.intersection(y)    # => [1, 2] (ONLY IN RUBY 2.6)x & y                # => [1, 2]

For more info about the new methods in Ruby 2.6, you can check this blog post about its new features