C#で2つの配列の共通要素(積集合)を取得する方法【Intersectメソッド】
C#で2つの配列の共通要素(交差・積集合)を取得するには、Intersectメソッドを使用します。このメソッドは、System.Linq名前空間に用意されている拡張メソッドで、LINQを使った配列操作の中でも特に便利な機能の一つです。
Intersectメソッドは、2つの配列を比較し、両方に存在する共通の要素だけを返します。重複する要素は自動的に除外され、結果は一意な値のコレクションとして取得できます。
配列の準備
まず、比較対象となる2つの整数型の配列を定義します。
int[] arr1 = { 44, 76, 98, 34 };
int[] arr2 = { 24, 98, 44, 55, 47, 86 };
この例では、両方の配列に「44」と「98」が含まれているため、これらが共通要素として抽出されることになります。
Intersectメソッドの使い方
共通要素を取得するには、一方の配列に対してIntersectメソッドを呼び出し、引数にもう一方の配列を渡します。
var intersect = arr1.Intersect(arr2);
戻り値は IEnumerable<int> 型となるため、foreachループなどで各要素を順番に取り出して処理します。
サンプルコード全体
以下は、2つの配列の交差を求めて結果をコンソールに出力する完全なサンプルコードです。
using System;
using System.Linq;
class Program {
static void Main() {
int[] arr1 = { 44, 76, 98, 34 };
int[] arr2 = { 24, 98, 44, 55, 47, 86 };
var intersect = arr1.Intersect(arr2);
foreach (int res in intersect) {
Console.WriteLine(res);
}
}
}
実行結果
44 98
補足:Intersectメソッドのポイント
- 名前空間: 使用するには
using System.Linq;の宣言が必要です。 - 遅延実行: Intersectは即座に実行されず、foreachなどで列挙されたタイミングで処理されます。
- 重複の排除: 結果には各共通要素が1回だけ含まれます。
- 文字列配列にも対応: int型だけでなく、string型などの任意の型の配列でも同様に使用できます。
このように、Intersectメソッドを使えば、複雑なループ処理を書くことなく、1行で2つの配列の共通要素を簡単に取得できます。
-
C++で2つの連結リストの交点を見つける方法
連結リストとは連結リスト(Linked List)は線形データ構造の一種です。各ノードは2つの部分で構成されており、一方にはノードの値(データ)が、もう一方には次のノードへのアドレス(ポインタ)が格納されています。ここでは、各ノードがリスト内の他のノードを指すポインタを持つ連結リストを想定します。この問題のタスクは、2つの連結リストが交差するノードを見つけることです。交差していない場合は、NULL(空)を出力として返します。入力例1出力:2解説: 与えられた連結リストは値「2」のノードで交差しているため、「2」を出力として返します。入力例2出力:NULL解説: 共通するノードが存在しないため、
-
Pythonで2つの配列の共通部分(交差)を効率的に求める方法
問題概要2つの配列 A と B が与えられたとき、これらの配列に共通して含まれる要素(交差・共通部分)を求めます。例えば、A = [1, 4, 5, 3, 6]、B = [2, 3, 5, 7, 9] の場合、両方の配列に存在する要素は 3 と 5 だけなので、結果は [3, 5] となります。この種の問題では重複の扱いがポイントになります。ある要素が両方の配列に複数回現れる場合は、その出現回数のうち少ない方の回数だけ結果に含める必要があります。解法のアプローチこの問題は、ハッシュマップ(Pythonでは辞書型 dict)を使って要素の出現頻度を管理することで、効率的に解くことができます。手順