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); //和集合と積集合の差集合=排他的論理和