Dotnet C# Arrays 多個 Array 比較方法 Dotnet C# Arrays 多個 Array 比較方法

Published on Tuesday, March 7, 2023

.Net Arrays Compare

今天碰到了一個問題需要判斷兩個 int array 的值是否相同

首先先準備資料,這邊 s 與 b 相同,p與其他都不相同

var s = new int[] { 1, 3, 5, 7 };
var p = new int[] { 2, 4, 6, 8 };
var b = new int[] { 1, 3, 5, 7 };

最直觀的作法就是使用 For 迴圈來處理,首先檢查長度是否為相同再來一一檢查元素是否相同

private bool forloop(int[] first, int[] second)
{
	if (first.Length != second.Length)
	{
		return false;
	}
	for (int i = 0; i < first.Length; i++)
	{
		if (first[i] != second[i])
		{
			return false;
		}
	}
	
	return true;
}
forloop(s,p);
forloop(s,b);

False
True

另外可以使用擴充方法 SequenceEqual 來進行順序檢查

s.SequenceEqual(p);
s.SequenceEqual(b);

False
True

也可以使用 Enumerable 提供的 SequenceEqual 方法,可以檢查各種 IEnumerable 型別

Enumerable.SequenceEqual(s, p)
Enumerable.SequenceEqual(s, b)

這邊需要注意的是如果使用運算符 == 是進行參考型別的檢查,並不是針對內部資料進行檢查

s == p;
s == b;

False
False

也可以使用 Enumerable 提供的 ReferenceEquals 方法

Enumerable.ReferenceEquals(s, p);
Enumerable.ReferenceEquals(s, b);

False
False

Summary

今天學習了 .Net 提供的比較 IEnumerable 型別的方法,基本上可以直接使用 Enumerable 提供的方法
如果是要比對資料可以使用 SequenceEqual 需要比較地址可以使用 ReferenceEquals 運算符號 ==