【C#】Linqで集合演算(Union, Concat, Intersect, Except, Distinct)

和集合や差集合と云った、いわゆる「集合演算」を調べていたのですが、「そんな専門用語使われても分かんねーよ!」となったので、自分なりに分かりやすい言葉で解説します。

演算説明
和集合(UnionコレクションAとコレクションB、両方の要素を含んだものを返します。(重複する要素を取り除きます)
和集合(ConcatコレクションAとコレクションB、両方の要素を含んだものを返します。(重複する要素を取り除かない)
積集合(IntersectコレクションAとコレクションB、両方に含まれる要素のみを返します。
差集合(ExceptコレクションAから、コレクションBの要素を取り除いたものを返します。
一意な集合(Distinctコレクションから重複する要素を取り除いたものを返します。

和集合(Union, Concat)

コレクションAとコレクションB、両方の要素を含んだものを返します。

Unionは重複する要素を取り除きますが、Concatは重複する要素を取り除かない(コレクションAの後ろにコレクションBを結合するだけ)です。


int[] colloctionA = new int[] { 1, 2, 3, 4, 5 };
int[] collectionB = new int[] { 4, 5, 6, 7, 8, 9 };

// { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
IEnumerable<int> unionEnumerable = collectionA.Union(collectionB);

// { 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9}
IEnumerable<int> concatEnumerable = collectionA.Concat(collectionB);

積集合(Intersect)

コレクションAとコレクションB、両方に含まれる要素のみを返します。


int[] colloctionA = new int[] { 1, 2, 3, 4, 5 };
int[] collectionB = new int[] { 2, 4 };

// { 2, 4 }
IEnumerable<int> intersectEnumerable = collectionA.Intersect(collectionB);

差集合(Except)

コレクションAから、コレクションBの要素を取り除いたものを返します。


int[] colloctionA = new int[] { 1, 2, 3, 4, 5 };
int[] collectionB = new int[] { 2, 4 };

// { 1, 3, 5 }
IEnumerable<int> exceptEnumerable = collectionA.Except(collectionB);

一意な集合(Distinct)

コレクションから重複する要素を取り除いたものを返します。


int[] colloction = new int[] { 1, 2, 2, 3, 3, 4, 4, 4, 5 };

// { 1, 2, 3, 4, 5 }
IEnumerable<int> distinctEnumerable= collectionA.Distinct();

参考

記事をシェアしてもらえると嬉しいです!