C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# LINQのIntersectメソッドで2つの配列の共通要素を取得する方法

C#のLINQには、2つのシーケンス(配列やリストなど)に共通して含まれる要素を抽出するためのIntersect()メソッドが用意されています。このメソッドを使えば、集合演算の「積集合」を簡単に求めることができます。

Intersectメソッドとは

Intersect()はSystem.Linq名前空間に属する標準クエリ演算子の一つで、2つのコレクションを比較し、両方に存在する要素のみを返します。戻り値はIEnumerable<T>型です。

サンプルデータの準備

まず、比較対象となる2つの整数型配列を用意します。

int[] val1 = { 15, 20, 40, 60, 75, 90 };
int[] val2 = { 17, 25, 35, 55, 75, 90 };

積集合を求めるコード

AsQueryable()メソッドでクエリ可能な形式に変換し、Intersect()を呼び出します。

val1.AsQueryable().Intersect(val2);

完全なサンプルプログラム

using System;
using System.Collections.Generic;
using System.Linq;

class Demo {
    static void Main() {
        int[] val1 = { 15, 20, 40, 60, 75, 90 };
        int[] val2 = { 17, 25, 35, 55, 75, 90 };

        IEnumerable<int> res = val1.AsQueryable().Intersect(val2);

        Console.WriteLine("両方のリストの共通要素...");
        foreach (int a in res)
            Console.WriteLine(a);
    }
}

実行結果

両方のリストの共通要素...
75
90

ポイント解説

実行結果からわかるように、val1とval2の両方に含まれている「75」と「90」だけが出力されました。

  • AsQueryable():配列をIQueryable<T>に変換するメソッドです。通常の配列であれば、直接Intersect()を呼び出すことも可能です。
  • 重複の自動除去:Intersect()は重複しない要素のみを返すため、結果に同じ値が2回現れることはありません。
  • 既定の比較子:要素の比較には既定の等値比較子(EqualityComparer<T>.Default)が使用されます。独自の比較ロジックを使いたい場合は、IEqualityComparer<T>を受け取るオーバーロードを利用しましょう。
  1. C# LINQ Distinct()メソッドでリストから重複要素を削除する方法

    C#のLINQで重複しない要素(一意の値)だけを取得したい場合は、Distinct()メソッドを使用します。このメソッドは、シーケンス内の重複する要素を取り除き、各要素を1度だけ返してくれます。 重複要素を含むリストの準備 まずは、重複した要素を含むリストを用意しましょう。 List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 }; このリストには「5」と「30」がそれぞれ2回含まれています。 Distinct()メソッドで重複を除去する 重複を除いた要素を取得するには、次のように

  2. C#のIntersectメソッドを使ってリストの共通要素を取得する方法

    C#では、LINQのIntersect()メソッドを使用することで、2つのコレクション(リスト)に共通して含まれる要素を簡単に取得できます。このメソッドは集合演算のひとつで、積集合(交差)を求める際に非常に便利です。リストを作成するまず、2つの整数型リストを作成します。var list1 = new List<int>{99, 87}; var list2 = new List<int>{56, 87, 45, 99};Intersect()メソッドで共通要素を取得する次に、Intersect()メソッドを呼び出して、上記2つのリストから共通する要素を取り出します。va