C#

LINQの集合演算

More than 1 year has passed since last update.

ListやDictonaryなどのIEnumerableインタフェイスを実装しているクラスに対して、LINQの集合演算が使えて便利です。


一意な要素の集合

以下の例は、listの重複する要素を取り除きます。

以下の例のdistinctListの要素は、「Ada」と「ALGOL」と「C#」と「COBOL」と「Java」となります(Adaは一つだけ)。


Distinct.cs

var list = new string[] { "Ada", "ALGOL", "C#", "COBOL", "Ada", "Java"};

var distinctList = list.Distinct<string>();


和集合

以下の例は、listの末尾にlist2を結合させます。そして、「O」を含む要素のみを取り出します。

以下の例のunionList の要素は、「ALGOL」と「COBOL」と「Objective-C」となります。


Union.cs

var list = new string[] { "Ada", "ALGOL", "C#", "COBOL", "Java" };

var list2 = new string[] { "BASIC", "Objective-C", "Ruby", "Python" };

var unionList = list.Union<string>(list2).Where(param => param.Contains("O"));



積集合

以下の例は、listとlist2の積をとります。 以下の例のintersectListの要素は、「C#」と「Java」になります。


Intersect.cs

var list = new string[] { "Ada", "ALGOL", "C#", "COBOL", "Java" };

var list2 = new string[] { "C#", "Java", "Ruby", "Python" };

var intersectList = list.Intersect<string>(list2);



差集合

以下の例は、listからlist2を引きます。 以下の例のexceptListの要素は、「Ada」と「ALGOL」と「COBOL」になります。


Distinct.cs

var list = new string[] { "Ada", "ALGOL", "C#", "COBOL", "Java" };

var list2 = new string[] { "C#", "Java", "Ruby", "Python" };

var exceptList = list.Except<string>(list2);



排他的論理和

以下の例は、listとlist2の排他的論理和を取得します。。 以下の例のxorの要素は、「Ada」と「ALGOL」と「COBOL」と「Ruby」と「Python」になります。


Xor.cs

var list = new string[] { "Ada", "ALGOL", "C#", "COBOL", "Java" };

var list2 = new string[] { "C#", "Java", "Ruby", "Python" };

var intersect = list.Intersect(list2); //積集合
var union = list.Union(list2); //和集合
var xor = union.Except(intersect); //和集合と積集合の差集合=排他的論理和