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