26

如何比较多维数组?只是真/假。

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);

有没有办法比较像一维数组这样的二维数组?

data1.SequenceEqual(data2);     

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

4

5 回答 5

33

多维数组可以在 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>());
于 2012-09-16T12:20:44.617 回答
3

您可以使用扁平化多维数组.Cast<String>

Console.WriteLine("2D Array");
String[,] array2d = new String[,] { { "A1", "B1" }, { "A2", "B2" } };
foreach(var s in array2d.Cast<String>())
    Console.Write(s + ", ");

Console.WriteLine("\r\n3D Array");
String[,] array3d = new String[,] { { "A1", "B1", "C1" }, { "A2", "B2", "C1" } };
foreach (var s in array3d.Cast<String>())
    Console.Write(s + ", ");

输出

2D Array
A1, B1, A2, B2, 
3D Array
A1, B1, C1, A2, B2, C1, 
于 2018-08-19T11:01:48.877 回答
2

比较二维数组的通用扩展方法:

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>());
于 2021-03-18T18:17:03.637 回答
-3

您也可以尝试使用 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;
      }    
   }
}      
于 2019-11-18T15:34:18.700 回答
-7

你可以这样做

data1.SequenceEqual(data2);  
于 2012-09-16T18:48:38.047 回答