在C ++中,如果要检查2个数组是否相等(就内容而言),您可以这样做:
#include <vector>
#include <cassert>
using namespace std;
int main (int argc, char * const argv[]) {
vector<int> a;
a.push_back(5);
a.push_back(6);
a.push_back(7);
vector<int> b = a; // this copies array a's contents to array b
assert( a == b ); // this compares the content of array a and b one element at a time
return 0;
}
如何在不编写自己的for-loop比较的情况下在C#中实现相同的功能?
到目前为止,我找到了3个链接,但我不确定它们是否已过时:我是C#新手,我正在使用Mono。
答案 0 :(得分:3)
bool equals = array1.OrderBy(a => a).SequenceEqual(array2.OrderBy(a => a));
简单方法
答案 1 :(得分:1)
我不确定MOno,这就是为什么我删除了我以前的答案
你可以通过循环执行它/ Stack实现becoz push / Pop是O(1)操作并且访问数组中的元素也是O(1)操作。
If (Arr1.Length != Arr2.Length)
{
return false // not equals
}
else
{
Arr1.Sort(); // important as both array has to be sorted
Arr2.Sort() ;// important as both array has to be sorted
for(int i=0;i<Arr1.Length ; i++)
{
if(Arr[i]!=Arr1[i])
break;
}
}
答案 2 :(得分:1)
这是一个有效的扩展方法,可以解决这个问题
public static bool Compare<T>(this T[] source, T[] target,
Func<T,T,bool> comparer )
{
if (source.Length != target.Length)
return false;
return !source.Where((t, i) => !comparer(t, target[i])).Any();
}
var a = new[] {2, 3, 4, 5, 6, 7, 8};
var b = new[] {2, 3, 4, 5, 6, 7, 8};
var c = new[] {2, 3, 4, 5, 6, 7, 8, 9};
var d = new[] {2, 4, 3, 5, 6, 8, 7};
var r1 = a.Compare(b, (i1, i2) => i1 == i2); // true
var r2 = a.Compare(c, (i1, i2) => i1 == i2); // false
var r3 = a.Compare(d, (i1, i2) => i1 == i2); // false