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

C#で2つのリストの差分を取得する方法:Except()メソッドの使い方


C#で2つのリストの差分(一方のリストにのみ存在する要素)を取得するには、LINQのExcept()メソッドを使うのが最も簡単です。まずは、比較対象となる2つのリストを用意しましょう。

// 最初のリスト
List<string> list1 = new List<string>();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");

// 2番目のリスト
List<string> list2 = new List<string>();
list2.Add("C");
list2.Add("D");

差分を求めるには、戻り値の型である IEnumerable<T>Except() メソッドを次のように組み合わせます。ここでは、list1 から list2 に含まれる要素を除外した結果が、3つ目の変数 list3 に格納されます。

IEnumerable<string> list3;
list3 = list1.Except(list2);

Except() は集合演算の一種で、「呼び出し元のコレクションから、引数に指定したコレクションに含まれる要素を取り除いたもの」を返します。以下に、処理の全体像がわかる完全なサンプルコードを示します。

サンプルコード

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

public class Demo {
    public static void Main() {
        List<string> list1 = new List<string>();
        list1.Add("A");
        list1.Add("B");
        list1.Add("C");
        list1.Add("D");

        Console.WriteLine("最初のリスト...");
        foreach(string value in list1) {
            Console.WriteLine(value);
        }

        Console.WriteLine("2番目のリスト...");
        List<string> list2 = new List<string>();

        list2.Add("C");
        list2.Add("D");
        foreach(string value in list2) {
            Console.WriteLine(value);
        }

        Console.WriteLine("2つのリストの差分...");
        IEnumerable<string> list3;
        list3 = list1.Except(list2);
        foreach(string value in list3) {
            Console.WriteLine(value);
        }
    }
}

実行結果

最初のリスト...
A
B
C
D
2番目のリスト...
C
D
2つのリストの差分...
A
B

このように、list1 には存在するものの list2 には存在しない要素「A」と「B」だけが出力されました。

Except()メソッドを使う際のポイント

  • System.Linq 名前空間が必要 — Except() は LINQ の拡張メソッドのため、ファイル先頭で using System.Linq; を宣言しておきましょう。
  • 重複要素は自動的に除去される — 結果には重複が含まれません。重複を保持したい場合は、別の手法を検討する必要があります。
  • 遅延実行される — Except() の結果は、foreach などで実際に列挙されたタイミングで初めて評価されます。
  1. 【初心者向け】Pythonで2つのリストの差分(違い)を抽出する方法を解説

    この記事では、2つのリストが与えられたときに、その差分(違い)を表示するPythonプログラムを紹介します。Pythonにはset()メソッドが用意されており、ここではこのメソッドを活用します。 セット(集合)とは、重複する要素を持たない順序なしのコレクションです。セットオブジェクトは、和集合・積集合・差集合・対称差といった数学的な操作もサポートしているため、リスト同士の比較に非常に便利です。 実行例 入力: A = [10, 15, 20, 25, 30, 35, 40] B = [25, 40, 35] 出力: [10, 20, 30, 15] 考え方 求めたい差分リストは、次のよう

  2. Pythonのリストとタプルの違いとは?特徴と使い分けのポイントを解説

    リストとタプルはどちらもシーケンス型 リスト(list)とタプル(tuple)は、どちらもPythonにおける「シーケンス型」に分類されるデータ型です。両者ともカンマで区切られた複数の要素を持ち、数値や文字列など異なる型のオブジェクトを混在させて格納することができます。 最大の違いは「可変か不変か」 リストとタプルの最も重要な違いは、リストが可変(mutable)であるのに対し、タプルは不変(immutable)であるという点です。 不変(イミュータブル)なオブジェクトは、一度メモリ上に作成されると内容を変更できません。そのため、タプルに対しては要素の追加・変更・削除が一切行えません。一方、