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

C#のSequenceEqualメソッドの使い方を徹底解説!コレクションの等価性を判定する方法

C#のSequenceEqualメソッドは、2つのコレクションが等しいかどうかを判定するために使用されるLINQのメソッドです。要素の数だけでなく、順序も含めて各要素が一致しているかどうかを比較し、結果をbool型(true / false)で返します。

このメソッドを使用するには、System.Linq名前空間が必要です。配列やリストなど、IEnumerableインターフェースを実装するあらゆるコレクションに対して利用できます。

サンプルデータの準備

まず、3つの文字列配列を用意してみましょう。

string[] arr1 = { "This", "is", "it" };
string[] arr2 = { "My", "work", "report" };
string[] arr3 = { "This", "is", "it" };

ここで、arr1とarr3は同じ内容ですが、arr2は異なる内容になっています。

SequenceEqualメソッドによる比較

次に、SequenceEqual()メソッドを使って、1つ目の配列(arr1)と2つ目の配列(arr2)を比較します。

arr1.SequenceEqual(arr2);

この呼び出しにより、両方のコレクションの要素が順番どおりにすべて一致していればtrue、そうでなければfalseが返されます。

実行例

以下は、3つの配列を実際に比較する完全なサンプルコードです。

using System;
using System.Linq;

class Program {
    static void Main() {
        string[] arr1 = { "This", "is", "it" };
        string[] arr2 = { "My", "work", "report" };
        string[] arr3 = { "This", "is", "it" };

        // arr1 と arr2 を比較
        bool res1 = arr1.SequenceEqual(arr2);
        Console.WriteLine(res1);

        // arr1 と arr3 を比較
        bool res2 = arr1.SequenceEqual(arr3);
        Console.WriteLine(res2);
    }
}

実行結果

False
True

解説

  • res1(False): arr1とarr2は要素の内容が異なるため、falseが返されます。
  • res2(True): arr1とarr3は要素の内容と順序が完全に一致しているため、trueが返されます。

なお、SequenceEqualメソッドは大文字・小文字を区別して比較します。大文字小文字を無視して比較したい場合は、第2引数にStringComparer.OrdinalIgnoreCaseなどの比較子(IEqualityComparer)を指定することで対応できます。

  1. C#のCompareTo()メソッドの使い方を解説

    C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数

  2. RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法

    2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが