Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
52
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
52
Help us understand the problem. What are the problem?