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>を受け取るオーバーロードを利用しましょう。
-
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()メソッドで重複を除去する 重複を除いた要素を取得するには、次のように
-
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