本記事の概要
この記事では、LINQを使用して、 2つのシーケンスの共通の要素を取得する方法について説明します。
公式サイト情報はコチラを参照してください。
2つのシーケンスの共通の要素を取得する
IntersectByメソッドは、2つのシーケンスの共通の要素を抽出するために使用されるLinqメソッドです。このメソッドは、2つのシーケンスの要素を比較するために、指定されたキー選択子を使用します。
IntersectBy メソッドの構文は以下の通りです
public static IEnumerable IntersectBy<TSource, TKey> (this IEnumerable first, IEnumerable second, Func<TSource, TKey> keySelector);
このメソッドには、2つの引数があります。最初の引数は、最初のシーケンスを表すIEnumerable型のオブジェクトです。2番目の引数は、2番目のシーケンスを表すIEnumerable型のオブジェクトです。そして、keySelectorは、シーケンスの要素を比較するために使用されるキー選択子です。
使用例
以下の例では、IntersectByメソッドを使用して、2つのシーケンスから共通の要素を抽出する方法を示します。
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { // first sequence var seq1 = new List { 1, 2, 3, 4, 5 }; // second sequence var seq2 = new List { 3, 4, 5, 6, 7 }; // intersect by var intersect = seq1.IntersectBy(seq2, x => x); // print intersected elements Console.WriteLine("Intersected elements:"); foreach (var element in intersect) { Console.WriteLine(element); } Console.ReadLine(); } }
この例では、2つのシーケンスseq1とseq2を作成し、IntersectByメソッドを使用して、共通の要素を抽出します。seq1とseq2には、3、4、5という共通の要素が含まれているため、intersect変数には、3、4、5という要素が含まれています。最後に、結果を出力します。
出力結果は以下の通りです。
3 4 5
IntersectメソッドとIntersectByメソッドの違い
IntersectメソッドとIntersectByメソッドは、どちらもLinqメソッドで、2つのシーケンスから共通の要素を抽出するために使用されます。しかし、両者にはいくつかの違いがあります。
引数の違い
Intersectメソッドは、2つのシーケンスを比較するだけの場合に使用されます。一方、IntersectByメソッドは、シーケンスの要素を比較するためにキー選択子を使用します。
シーケンスの要素型の違い
Intersectメソッドは、2つのシーケンスの要素が同じ型である必要があります。一方、IntersectByメソッドは、2つのシーケンスの要素が異なる型であっても、キー選択子によって比較できる場合に使用できます。
結果の型の違い
Intersectメソッドは、重複した要素がある場合には、結果に1つの要素しか含まれません。一方、IntersectByメソッドは、重複した要素を複数含めることができます。
以下は、IntersectメソッドとIntersectByメソッドの使用例です。
Intersectメソッドの使用例:
var seq1 = new List { 1, 2, 3, 4, 5 }; var seq2 = new List { 3, 4, 5, 6, 7 }; var intersect = seq1.Intersect(seq2); // intersected elements: 3, 4, 5
IntersectByメソッドの使用例:
var seq1 = new List { "apple", "banana", "cherry" }; var seq2 = new List { new Fruit { Name = "banana" }, new Fruit { Name = "cherry" }, new Fruit { Name = "durian" } }; var intersect = seq1.IntersectBy(seq2, x => x.ToLower()); // intersected elements: "banana", "cherry"
.NET クラス Tips 一覧
これまでに紹介した .NET Tips 一覧はこちら。
コメント