C#:如何比较2D数组中每一行的总和?

时间:2015-02-07 11:51:21

标签: c# arrays

我想知道如何检查2D数组中每一行的总和是否相等。

编辑:我厌倦了迈克的建议,但我仍然把索引超出了范围。我错过了什么?

 bool sumSame;
          int sum3=0;
          int sum4 = 0;
          for (int i = 0; i < arr.GetLength(0); i++)
          {
              sum3 += arr[0, i];
          }
          for (int i = 0; i < arr.GetLength(0); i++)
          {
              sum4 = 0;
              for (int j = 0; j < arr.GetLength(1); i++)
              {
                  **sum4 += arr[i, j];**//The Error is Here
              }
              if (sum4 != sum3)
              {
                  sumSame = false;
                  break;
              }
          }
          sumSame = true

2 个答案:

答案 0 :(得分:0)

您想知道2D数组中的所有行是否具有相同的总和。

因此,您需要编写一个计算行总和的函数。

然后你的问题变成一维的:检查为一维数组的每个元素调用的函数是否为每个元素返回相同的值。 (元素又是另一个数组的事实是无关紧要的。)

如果您不想(或者不知道如何)编写函数,那么您可以编写将行的总和计算为嵌套循环的代码(正如您已经尝试过的那样),但仍然,如果你在概念上将这两个任务视为彼此完全不同,这有助于它们不应混合它们的变量,外部循环应该只使用内部循环的计算结果。

通常,我们确保数组的所有元素都等于某个值的方式是我们计算第一个元素的值(在索引0处),然后我们循环每个后续< / em> element(for( int i = 1; ...)并检查为此元素计算的值是否等于我们为第一个元素获得的值。

答案 1 :(得分:0)

您可以将每个数组的总和添加到List<int>,并使用Distinct().Count()检查不同结果的数量,如果它是1,则所有2D数组的结果都相同。< / p>

int[,] arr = new int[,]
{
    {1,2,3 },
    {3,2,1 },
    {2,3,1 }
};

List<int> sums = new List<int>();

for (int i = 0; i < arr.GetLength(0); i++)
{
     int sum = 0;
     for (int j = 0; j < arr.GetLength(1); j++)
     {
         sum += arr[i, j];      
     }
     sums.Add(sum);
}

bool sameResults = sums.Distinct().Count() == 1;