C#で2つのリストの共通要素(積集合)を取得する方法:Intersect()メソッドの使い方
C#で2つのリスト(List)に共通して含まれる要素、つまり「積集合(交差)」を求めるには、LINQが提供する Intersect() メソッドを使うのが最も簡単です。
Intersect() メソッドは、2つのシーケンスを比較し、両方に存在する要素だけを返します。戻り値は IEnumerable<T> なので、必要に応じて ToList() メソッドで List 型に変換すると便利です。
サンプルデータの準備
まず、比較対象となる2つのリストを作成します。
1つ目のリストは以下のとおりです。
List<int> list1 = new List<int>(); list1.Add(2); list1.Add(3); list1.Add(5); list1.Add(7);
2つ目のリストは以下のとおりです。
List<int> list2 = new List<int>(); list2.Add(5); list2.Add(4); list2.Add(6); list2.Add(8);
この場合、両方のリストに含まれているのは 5 のみです。したがって、積集合の結果は1件になります。
完全なサンプルコード
2つのリストの交差を求めるC#のコード全体は以下のとおりです。
例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Demo {
public class Program {
public static void Main(String[] args) {
List<int> list1 = new List<int>();
list1.Add(2);
list1.Add(3);
list1.Add(5);
list1.Add(7);
Console.WriteLine(list1.Count);
List<int> list2 = new List<int>();
list2.Add(5);
list2.Add(4);
list2.Add(6);
list2.Add(8);
Console.WriteLine(list2.Count);
List<int> common = list1.Intersect(list2).ToList();
Console.WriteLine(common.Count);
}
}
}
実行結果
4 4 1
コードの解説
list1.Count:1つ目のリストの要素数「4」を出力します。list2.Count:2つ目のリストの要素数「4」を出力します。list1.Intersect(list2).ToList():両方のリストに共通する要素のみを抽出し、新しいリストとして返します。この例では「5」のみが該当するため、common.Countは「1」となります。
補足ポイント
- 重複の扱い: Intersect() は重複する要素を自動的に除外し、ユニークな値のみを返します。
- 順序について: 結果の順序は保証されないため、順序が必要な場合は
OrderBy()などと組み合わせてください。 - 文字列リストにも対応:
List<string>など他の型でも同様に使用できます。大文字・小文字を区別せずに比較したい場合は、IEqualityComparer<T>を引数に渡すことも可能です。
-
Javaで2つの連結リストの交点を見つける方法
連結リスト(Linked List)は、各ノードが2つのブロックで構成される線形データ構造です。一方のブロックにはノードの値(データ)が格納され、もう一方のブロックには次のノードへのアドレス(ポインタ)が格納されます。ここでは、2つの連結リストが交差するノードを見つける問題を扱います。2つのリストが共通のノードを持つ場合、その交点となるノードを特定します。交点が存在しない場合は、NULL(または空)を出力として返します。具体例入力1:出力:2説明: 与えられた連結リストは値「2」のノードで交差しているため、出力として「2」を返します。入力2:出力:NULL説明: 共通のノードが存在しないため、
-
Pythonで連結リストを使って2つの多項式を加算するプログラムの作り方
問題の概要 この記事では、連結リストで表現された2つの多項式を加算するPythonプログラムを紹介します。 2つの多項式が与えられ、それらの和を求めることを考えます。多項式は連結リストとして表現し、多項式の各項は連結リストの1つのノードに対応させます。各ノードには「係数」「次数(べき指数)」、そして「次のノードへの参照(ポインタ)」を持たせます。最終的なゴールは、2つの多項式の和を表す新しい連結リストを返すことです。 たとえば、入力が以下の画像のような2つの多項式だった場合を見てみましょう。 1x^1 + 1x^2 = 0 と 2x^1 + 3x^0 = 0 この場合、出力は次のようになりま