【问题标题】:How to get the sum of each column and row in 2d array?如何获得二维数组中每一列和每一行的总和?
【发布时间】:2021-08-13 08:15:36
【问题描述】:

我有一个 7 x12 的二维数组。我被困在如何获得每列和每行的总和并将每个结果放入列表中,一个带有每列总和的结果,另一个带有每一行的结果。

所以,对于列,我想将每一列的结果保存在一个临时整数变量中,用 'a' 在每一行中迭代,当 'a' 等于 12(即行数)时,然后检查'p'(即列数)是否等于7并退出循环(这意味着每列的总和已添加到新数组中),如果不是,则将临时变量添加到新数组,临时变量和 'a' 将重置,因此循环可以重新开始并将 p 加一以获得下一行的总和。

for (int a = 0; a < 12; a++)
        {
            int sum =+ students[a, p];

            if(a == 12)
            {
                if (p == 7)
                {
                    break;
                }

                sum_columns.Add(sum);
                sum = 0;
                a = 0;
                p++;

            }
        }

谢谢大家!

【问题讨论】:

  • 在第 3 行你有 =+ 而不是 +==+ 只会在每次迭代时将 sum 的值设置为正 [a,p],而不是将 [a,p] 添加到总和中。

标签: c# arrays loops multidimensional-array sum


【解决方案1】:

您可以根据需要简单地进行迭代。无需复杂的条件或重置:

for (int col = 0; col < 7; ++col) // iterate through the columns
{
    int sum = 0;
    for (int row = 0; row < 12; ++row) // iterate through the rows in the column and sum
    {
        sum += students[row, col];
    }
    sum_columns.Add(sum); // add sum to the list
}

Try it online

【讨论】:

    【解决方案2】:

    不是最有效的,但允许您抓取特定的行或列。

    class Program
    {
        static IEnumerable<T> GetRow<T>(T[,] someArray, int row)
        {
            for (int i = 0; i <= someArray.GetUpperBound(1); i++)
                yield return someArray[row, i];
        }
    
        static IEnumerable<T> GetColumn<T>(T[,] someArray, int column)
        {
            for (int i = 0; i <= someArray.GetUpperBound(0); i++)
                yield return someArray[i, column];
        }
    
        static void Main(string[] args)
        {
            int[,] someArray = new int[4, 2]
                {
                    { 1, 2 },
                    { 3, 4 },
                    { 5, 6 },
                    { 7, 8 }
                };
            int rows = someArray.GetUpperBound(0) + 1;
            int columns = someArray.GetUpperBound(1) + 1;
            for (int i = 0; i < rows; i++)
                Console.WriteLine($"Row {i} sum is {GetRow(someArray, i).Sum()}");
            for (int i = 0; i < columns; i++)
                Console.WriteLine($"Column {i} sum is {GetColumn(someArray, i).Sum()}");
        }
    }
    

    输出:

    Row 0 sum is 3
    Row 1 sum is 7
    Row 2 sum is 11
    Row 3 sum is 15
    Column 0 sum is 16
    Column 1 sum is 20
    

    【讨论】:

      【解决方案3】:

      使用 Linq,

       public int GetSumOfColumn(int[,] matrix, int columnNumber)
          {
              return Enumerable.Range(0, matrix.GetLength(0))
                      .Select(x => matrix[x, columnNumber])
                      .Sum();
          }
      
          public int GetSumOfRow(int[,] matrix, int rowNumber)
          {
              return Enumerable.Range(0, matrix.GetLength(1))
                      .Select(x => matrix[rowNumber, x])
                      .Sum();
          }
      

      在单独的 for 循环中调用这些函数,我是为行做的,你可以尝试对列进行同样的操作。

          List<int> row_sum = new List<int>();
          for(var rowIndex = 0; rowIndex < 4; rowIndex++)
          {
              var sum = GetSumOfRow(array, rowIndex);
              row_sum.Add(sum);
          }
          Console.WriteLine(string.Join(Environment.NewLine, row_sum));
      

      实现:.NET FIDDLE

      参考:https://www.codegrepper.com/

      【讨论】:

        猜你喜欢
        • 2021-12-04
        • 2018-08-30
        • 2021-12-23
        • 1970-01-01
        • 2019-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多