【问题标题】:How to compare multidimensional arrays in C# ?如何比较 C# 中的多维数组?
【发布时间】:2012-09-08 22:22:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# arrays compare multidimensional-array


    【解决方案1】:

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

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

    【讨论】:

    • @user287107 是的,正是我要找的!非常感谢!
    【解决方案2】:

    您可以使用.Cast&lt;String&gt; 展开多维数组

    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, 
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您也可以尝试使用 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;
              }    
           }
        }      
        

        【讨论】:

        • 在几个点上是错误的:1) isEqual 在其作用域结束时死亡 2) 我们想要检测至少一个 false 来断言数组不相等,所以我们想要检查值是否不同的。只需测试您的代码。
        【解决方案5】:

        你可以这样做

        data1.SequenceEqual(data2);  
        

        【讨论】:

        • 多维数组不包含“SequenceEqual”的定义。我相信这就是作者寻找问题答案的原因。
        猜你喜欢
        • 1970-01-01
        • 2017-11-29
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 2011-11-15
        相关资源
        最近更新 更多