Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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#_Arrays_Compare_Multidimensional Array - Fatal编程技术网

如何在C#中比较多维数组?

如何在C#中比较多维数组?,c#,arrays,compare,multidimensional-array,C#,Arrays,Compare,Multidimensional Array,如何比较多维数组?只是对/错 double[,] data1 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; double[,] data2 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; //bool compare = data1.SequenceEqual(data2); 有没有办法比较2d数组和1d数组 data1.SequenceE

如何比较多维数组?只是对/错

double[,] data1 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };    
double[,] data2 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

//bool compare = data1.SequenceEqual(data2);
有没有办法比较2d数组和1d数组

data1.SequenceEqual(data2);     

我必须每秒钟比较一次,所以最简单的方法会很好。非常感谢。

在linq中,多维数组可以用作一维可枚举数组。您只需检查所有尺寸的长度。这个片段应该足够了:

var equal =
    data1.Rank == data2.Rank &&
    Enumerable.Range(0,data1.Rank).All(dimension => data1.GetLength(dimension) == data2.GetLength(dimension)) &&
    data1.Cast<double>().SequenceEqual(data2.Cast<double>());
var相等=
data1.Rank==data2.Rank&&
Enumerable.Range(0,data1.Rank).All(维度=>data1.GetLength(维度)==data2.GetLength(维度))&&
data1.Cast().SequenceEqual(data2.Cast());
您可以这样做

data1.SequenceEqual(data2);  

您可以使用
.Cast


您还可以尝试使用2个for循环来解决它,并将它们与计数器进行比较

也许是这样的

for(int counter1 = 0; counter1 < data1.GetLength(0); counter1++)
{
   for(int counter2 = 0; counter2 < data2.GetLength(1); counter2++)
   {
      if(data1[counter1, counter2] == data2[counter1, counter2])
      {
         bool isEqual = true;
      }    
   }
}      
for(int counter1=0;counter1
比较二维阵列的通用扩展方法:

public static bool SequenceEquals<T>(this T[,] a, T[,] b) => a.Rank == b.Rank
    && Enumerable.Range(0, a.Rank).All(d=> a.GetLength(d) == b.GetLength(d))
    && a.Cast<T>().SequenceEqual(b.Cast<T>());
publicstaticboolsequenceequals(这个T[,]a,T[,]b)=>a.Rank==b.Rank
&&可枚举范围(0,a.Rank).All(d=>a.GetLength(d)==b.GetLength(d))
&&a.Cast().SequenceEqual(b.Cast());

@user287107是的,正是我要找的!谢谢!多维数组不包含“SequenceEqual”的定义。我相信这就是作者寻找问题答案的原因。有几点是错误的:1)isEqual在其作用域的末尾死亡2)我们想检测至少一个false来断言数组不相等,所以我们想检查值是否不同。只需测试你的代码。
for(int counter1 = 0; counter1 < data1.GetLength(0); counter1++)
{
   for(int counter2 = 0; counter2 < data2.GetLength(1); counter2++)
   {
      if(data1[counter1, counter2] == data2[counter1, counter2])
      {
         bool isEqual = true;
      }    
   }
}      
public static bool SequenceEquals<T>(this T[,] a, T[,] b) => a.Rank == b.Rank
    && Enumerable.Range(0, a.Rank).All(d=> a.GetLength(d) == b.GetLength(d))
    && a.Cast<T>().SequenceEqual(b.Cast<T>());