C#で2つのシーケンスの差分を取得する方法:Except()メソッドの使い方
C#では、LINQのExcept()メソッドを使うことで、2つのシーケンス(コレクション)の差分を簡単に求めることができます。この記事では、Except()メソッドを使って、片方のシーケンスにのみ存在する要素を抽出する方法を解説します。
2つのシーケンスを準備する
まず、比較対象となる2つのdouble型の配列を用意します。
double[] arr1 = { 10.2, 15.6, 23.3, 30.5, 50.2 };
double[] arr2 = { 15.6, 30.5, 50.2 };
ここでは、arr1には5つの要素が含まれ、arr2にはそのうちの3つの要素が含まれています。
Except()メソッドで差分を取得する
2つの配列の差分を取得するには、Except()メソッドを使用します。このメソッドは、最初のシーケンスから2番目のシーケンスに含まれる要素を除外した結果を返します。
IEnumerable<double> res = arr1.AsQueryable().Except(arr2);
この例では、arr1の中でarr2に存在しない要素、つまり「10.2」と「23.3」が抽出されます。
サンプルコード全体
以下は、Except()メソッドを使った差分取得の完全なサンプルコードです。
using System;
using System.Linq;
using System.Collections.Generic;
class Demo {
static void Main() {
double[] arr1 = { 10.2, 15.6, 23.3, 30.5, 50.2 };
double[] arr2 = { 15.6, 30.5, 50.2 };
Console.WriteLine("Initial List...");
foreach(double ele in arr1) {
Console.WriteLine(ele);
}
IEnumerable<double> res = arr1.AsQueryable().Except(arr2);
Console.WriteLine("New List...");
foreach (double a in res) {
Console.WriteLine(a);
}
}
}
実行結果
Initial List... 10.2 15.6 23.3 30.5 50.2 New List... 10.2 23.3
ポイントまとめ
- Except()メソッドは、System.Linq名前空間に含まれる拡張メソッドです。
- 戻り値はIEnumerable<T>型として返されるため、foreach文などで反復処理できます。
- デフォルトでは既定の等値比較子を使用して要素が比較されます。カスタムクラスを扱う場合は、IEqualityComparerを実装して渡すことも可能です。
- 結果には重複した要素は含まれません。
Except()メソッドを活用すれば、データセット間の差分抽出を簡潔なコードで実現できます。集合演算が必要な場面でぜひ活用してみてください。
-
Androidで2つの日付の差分(日数)を取得する方法【サンプルコード付き】
はじめに この記事では、Androidアプリで2つの日付の差分(日数)を取得する方法を、実際に動作するサンプルコードとともに解説します。日付の差分計算は、利用期間の表示やイベントまでの残り日数のカウントなど、さまざまな場面で役立つ基本的な処理です。 実装の手順 ステップ1:Android Studioで新規プロジェクトを作成 Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 ステップ2:レイアウトファイル(activity_main.xml)の編集 res/layout/ac
-
C++で3次元空間における2つの平面間の角度を計算する方法
本記事では、3次元空間内にある2つの平面 P1 と P2 の間の角度を求める方法を解説します。平面の方程式と角度の公式平面 Pi の方程式は、一般に次の形式で表されます。a・x + b・y + c・z + d = 0ここで、係数 (a, b, c) は平面の法線ベクトルを表しています。2つの平面がなす角度を「A」とすると、それぞれの法線ベクトルのなす角として、次の式で求められます。cos A = (a₁a₂ + b₁b₂ + c₁c₂) / (√(a₁² + b₁² + c₁²) × √(a₂² + b₂² + c₂²))つまり、分子は2つの法線ベクトルの内積、分母はそれぞれの法線ベクトルの大