Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中比较数组的相等性? 在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; } #包括 #包括 使用名称空间std; int main(int argc,char*const argv[]{ 载体a; a、 推回(5); a、 推回(6); a、 推回(7); 向量b=a;//将数组a的内容复制到数组b assert(a==b);//一次比较数组a和b的内容一个元素 返回0; }_C#_Mono - Fatal编程技术网

如何在C#中比较数组的相等性? 在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; } #包括 #包括 使用名称空间std; int main(int argc,char*const argv[]{ 载体a; a、 推回(5); a、 推回(6); a、 推回(7); 向量b=a;//将数组a的内容复制到数组b assert(a==b);//一次比较数组a和b的内容一个元素 返回0; }

如何在C#中比较数组的相等性? 在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; } #包括 #包括 使用名称空间std; int main(int argc,char*const argv[]{ 载体a; a、 推回(5); a、 推回(6); a、 推回(7); 向量b=a;//将数组a的内容复制到数组b assert(a==b);//一次比较数组a和b的内容一个元素 返回0; },c#,mono,C#,Mono,如果不为循环编写自己的比较,我如何在C#中实现同样的功能 到目前为止,我找到了3个链接,但我不确定它们是否过时: (滚动你自己的循环) (使用SequenceEqual()或Intersect()--但Mono支持这一点吗?) --我真的很惊讶比较数组内容不是现成的= 我是一名C#新手,我正在使用Mono。我不确定Mono,这就是我删除之前答案的原因 您可以通过循环/Stack实现来实现,因为push/Pop是O(1)操作,访问数组中的元素也是O(1)操作 If (Arr1.Length !

如果不为循环编写自己的比较,我如何在C#中实现同样的功能

到目前为止,我找到了3个链接,但我不确定它们是否过时:

  • (滚动你自己的循环)
  • (使用SequenceEqual()或Intersect()--但Mono支持这一点吗?)
  • --我真的很惊讶比较数组内容不是现成的=

我是一名C#新手,我正在使用Mono。

我不确定Mono,这就是我删除之前答案的原因

您可以通过循环/Stack实现来实现,因为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;
         }

  }
If(Arr1.Length!=Arr2.Length)
{
返回false//不等于
}
其他的
{
Arr1.Sort();//很重要,因为两个数组都必须排序
Arr2.Sort();//很重要,因为两个数组都必须排序

对于(inti=0;i,这里有一个有效的扩展方法可以实现这一点

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
公共静态bool比较(此T[]源,T[]目标,
函数比较器)
{
if(source.Length!=target.Length)
返回false;
return!source.Where((t,i)=>!comparer(t,target[i]).Any();
}
var a=新[]{2,3,4,5,6,7,8};
var b=新[]{2,3,4,5,6,7,8};
var c=新[]{2,3,4,5,6,7,8,9};
var d=新[]{2,4,3,5,6,8,7};
var r1=a.比较(b,(i1,i2)=>i1==i2);//真
var r2=a.Compare(c,(i1,i2)=>i1==i2);//false
var r3=a.Compare(d,(i1,i2)=>i1==i2);//false

easy way

您在Mono中尝试过LINQ/SequenceEqual/Intersect吗?如果成功,它将是最容易的赢家。@pst您应该发布一个答案并为他们赢得选票。:)@pst:我在MonoDevelop中尝试过,但Intellisense没有弹出任何内容,因此它一定不受支持。您要比较的确切集合类型是什么?它是IEnumerable吗?@Gishu:我正在尝试将Object[]与Object[]进行比较。实际上,内容只是:“A”、“B”、“C”。这是假设数组是无序的。@Brian:我在else中对数组进行了排序,这是第一步,我不知道Mono是否有排序方法。这是我的观点。在您的实现中{1,2}和{2,1}是相等的,但这可能不是预期的行为。仅此而已。如果支持LINQ,您可以简单地使用
SequenceEqual
@Danny-如果两个源是数组且长度不等,那么我的实现将更快,因为SequenceEquals仅通过集合IEnumerable接口执行比较。此外,我的实现允许让用户提供一个执行比较的函数,而SequenceEquals尝试查找EqualityComparer.Default的值-如果缓存中不存在EqualityComparer.Default,则会使用反射创建一个,这可能会导致性能问题。我是指
.Where()。代码中的任何
部分都可以是简单的
SequenceEqual,您还可以在其中提供自定义的比较器。
bool equals = array1.OrderBy(a => a).SequenceEqual(array2.OrderBy(a => a));