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

C#で2つのListオブジェクトが等しいかどうかを確認する方法

C#において、2つの List<T> オブジェクトが等しいかどうかを確認するには、Equals() メソッドを使用します。ただし、このメソッドはリストの「参照」が同一であるかどうかを判定するものであり、要素の中身が同じかどうかを比較するものではない点に注意が必要です。

Equals()メソッドの基本的な動作

まず、内容の異なる2つのリストを比較した場合の例を見てみましょう。

サンプルコード

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(String[] args){
      // リスト1を作成
      List<string> list1 = new List<string>();
      list1.Add("One");
      list1.Add("Two");
      list1.Add("Three");
      list1.Add("Four");
      list1.Add("Five");

      Console.WriteLine("List1の要素...");
      foreach (string res in list1){
         Console.WriteLine(res);
      }

      // リスト2を作成
      List<string> list2 = new List<string>();
      list2.Add("India");
      list2.Add("US");
      list2.Add("UK");
      list2.Add("Canada");
      list2.Add("Poland");
      list2.Add("Netherlands");

      Console.WriteLine("List2の要素...");
      foreach (string res in list2){
         Console.WriteLine(res);
      }

      // 2つのリストを比較
      Console.WriteLine("List2はList1と等しいか? = " + list2.Equals(list1));
   }
}

実行結果

List1の要素...
One
Two
Three
Four
Five
List2の要素...
India
US
UK
Canada
Poland
Netherlands
List2はList1と等しいか? = False

この例では、list1とlist2はそれぞれ別々に生成された独立したオブジェクトであるため、Equals() の結果は False となります。たとえ要素の内容が完全に一致していたとしても、参照が異なる限り結果はFalseになります。

同じ参照を持つリストを比較した場合

次に、一方のリスト変数にもう一方のリストへの参照を代入した場合の例を見てみましょう。

サンプルコード

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(String[] args){
      // リスト1を作成
      List<string> list1 = new List<string>();
      list1.Add("One");
      list1.Add("Two");
      list1.Add("Three");
      list1.Add("Four");
      list1.Add("Five");

      Console.WriteLine("List1の要素...");
      foreach (string res in list1){
         Console.WriteLine(res);
      }

      // リスト2を作成
      List<string> list2 = new List<string>();
      list2.Add("India");
      list2.Add("US");
      list2.Add("UK");
      list2.Add("Canada");
      list2.Add("Poland");
      list2.Add("Netherlands");

      Console.WriteLine("List2の要素...");
      foreach (string res in list2){
         Console.WriteLine(res);
      }

      // list3にlist2の参照を代入
      List<string> list3 = new List<string>();
      list3 = list2;

      // 同一参照かどうかを比較
      Console.WriteLine("List3はList2と等しいか? = " + list3.Equals(list2));
   }
}

実行結果

List1の要素...
One
Two
Three
Four
Five
List2の要素...
India
US
UK
Canada
Poland
Netherlands
List3はList2と等しいか? = True

この例では、list3 = list2; によってlist3はlist2と同じオブジェクト(同一インスタンス)を参照しています。そのため、Equals() の結果は True となります。

要素の内容を比較したい場合はSequenceEqual()を使う

リストの「中身」が順序も含めて一致しているかどうかを確認したい場合は、LINQの SequenceEqual() メソッドを使用します。

using System.Linq;

bool isEqual = list1.SequenceEqual(list2);

SequenceEqual() は、両方のリストの要素数が同じで、かつ同じ順序ですべての要素が一致している場合にTrueを返します。実務では、参照ではなく値の比較を行いたいケースが多いため、用途に応じて Equals()SequenceEqual() を使い分けることが重要です。

まとめ

  • List.Equals() は参照の同一性を判定するため、別々に生成されたリストは内容が同じでもFalseになる。
  • 変数間で参照を代入すると同一インスタンスを指すため、Equals() はTrueを返す。
  • 要素の内容・順序を比較したい場合は、LINQの SequenceEqual() を使用する。
  1. Python – リストの要素とインデックスが一致しているかどうかを確認する方法

    リスト内の要素とそのインデックスが一致しているかどうかを確認したい場合、シンプルな反復処理とPythonの組み込み関数 enumerate() を活用すると効率的に実装できます。enumerate() は、リストを走査しながらインデックスと要素を同時に取得できる便利な関数です。サンプルコード以下に具体的な実装例を示します。my_list_1 = [12, 62, 19, 79, 58, 0, 99] my_list_2 = [12, 74, 19, 54, 58, 0, 11] print(The first list is :) print(my_list_1) print(The se

  2. Pythonで2つのタプルのリストが同一かどうかを確認する方法

    Pythonで2つのタプルのリスト(リスト内にタプルが格納されたデータ構造)が完全に同一であるかどうかを確認したい場合は、「==」演算子を使用するのが最も簡単な方法です。「==」演算子は、2つのイテラブル(反復可能オブジェクト)同士を比較し、すべての要素が同じ順序で一致しているかどうかを判定します。すべて一致していれば True、一つでも異なる要素や順序があれば False を返します。なお、リストは整数、浮動小数点数、文字列など、さまざまなデータ型の値をまとめて格納できる柔軟なデータ構造です。タプルのリストとは、リストの中に複数のタプルが入っている形式を指します。サンプルコード以下に、2つの