LoginSignup
96
64

More than 5 years have passed since last update.

rubyのArrayで集合(和集合・積集合・差集合・対称差集合・補集合)

Last updated at Posted at 2017-07-12

rubyのArrayで、
和集合・積集合・差集合をしたいとき、
それぞれ「 | 」・「 & 」・「 - 」でできます。
また、発展として対称差集合・補集合をしてみます。

ちなみに、rubyには、集合を表すSetクラスも用意されています。([参考]Setクラスでの集合

和集合「|

[1,1,2,3,3] | [3,4,5]
# => [1, 2, 3, 4, 5]

重複している要素は取り除かれます。

積集合「&

[1,1,2,3,3] & [3,4,5]
# => [3]

重複している要素は取り除かれます。

差集合「-

[1,1,2,3,3] - [3,4,5]
=> [1, 1, 2]

左辺で重複していて右辺にある要素は重複している要素は取り除かれますが、
左辺で重複していて右辺にはない要素は除かれないです。

発展

対称差集合

差集合によって求めるパターン(重複あり)

a = [1,1,2,3,3]
b = [3,4,5]
(a - b) + (b - a)
# => [1, 1, 2, 4, 5]

和集合と積集合によって求めるパターン(重複なし)

a = [1,1,2,3,3]
b = [3,4,5]
a_or_b = (a | b)
a_and_b = (a & b)

a_or_b.delete_if do |item|
  a_and_b.include?(item)
end

補集合

u = [1,2,3,4,5]
a = [1,2]

u.delete_if do |item|
  a.include?(item)
end

[画像引用先]:http://www.wikiwand.com/ja/%E9%9B%86%E5%90%88#/.E5.A4.96.E9.83.A8.E3.83.AA.E3.83.B3.E3.82.AF

96
64
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
96
64