[.NET クラスライブラリ Tips][LINQ] 2つのシーケンスの共通の要素を取得する(IntersectByメソッド)

スポンサーリンク

本記事の概要

この記事では、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 一覧はこちら

Please follow and like us:

コメント

タイトルとURLをコピーしました