查找数组中的列总数

Finding the column total in an array

本文关键字:数组 查找      更新时间:2023-10-16

我有一个随机元素的一维数组,通过一个m*n网格。我想找出其中的行总数和列总数

1维数组是这样的:(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12日,13日,14日,15日,16日,17日,18日,19日,20)

我想这样对待它:

01 02 03 04 05

06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

现在我想找到reo total和列total。行总计按如下方式完成:

for (int i = 0; i < totalRows; i++)
        {
            for (int j = 0; j < totalColumns; j++)
            {
                rowTotal[i] += numbers[temp + j];
            }               
            temp += totalColumns;
        }

我正试图对Column做同样的事情。下面是代码:

for (int i = 0; i < totalColumns; i++)
        {
            tempk = 0;
            for (int j = 0; j < totalRows; j++)
            {
                blockTotal[i] += numbers[i+j+tempk];
               tempk += totalColumns;
            }
        }

我无法按预期获得列总数。请帮助。

你可以在同一个循环中得到这两个

for (int i = 0; i < totalRows; i++)
{
    for (int j = 0; j < totalColumns; j++)
    {
        rowTotal[i] += numbers[i * totalColumns + j];
        blockTotal[j] += numbers[i * totalColumns + j];
    }            
}

最简单的方法是编写一个小方法,将"逻辑" (row, col)地址转换为索引:

int numberAt(int row, int col)
{
    return numbers[row * totalColumns + col];
}
int[] colTotals = new int[totalColumns];
int[] rowTotals = new int[totalRows];
for (int row = 0; row < totalRows; ++row)
{
    for (int col = 0; col < totalColumns; ++col)
    {
        int number = numberAt(row, col);
        rowTotals[row] += number; 
        colTotals[col] += number;
    }
}

对下面评论中的问题进行编辑:

下面是一个完整的可编译示例,演示了它在非正方形数组上的工作:

using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
    class Program
    {
        // Array will 4x3 (rows x cols):
        //
        //  1  2  3 |  6
        //  4  5  6 | 15
        //  7  8  9 | 24
        // 10 11 12 | 33
        // ---------
        // 22 26 30
        int[] numbers = Enumerable.Range(1, 12).ToArray();
        int totalColumns = 3;
        int totalRows    = 4;
        int numberAt(int row, int col)
        {
            return numbers[row * totalColumns + col];
        }
        void test()
        {
            int[] colTotals = new int[totalColumns];
            int[] rowTotals = new int[totalRows];
            for (int row = 0; row < totalRows; ++row)
            {
                for (int col = 0; col < totalColumns; ++col)
                {
                    int number = numberAt(row, col);
                    rowTotals[row] += number;
                    colTotals[col] += number;
                }
            }
            Console.WriteLine("Row totals");
            foreach (int rowTotal in rowTotals)
                Console.Write(rowTotal + " ");
            Console.WriteLine("nCol totals");
            foreach (int colTotal in colTotals)
                Console.Write(colTotal + " ");
            Console.WriteLine();
        }
        static void Main()
        {
            new Program().test();
        }
    }
}

总行数

for(int r = 0; r < totalRows; r++)
{
  for(int c = 0; c < totalColumns; c++)
  {
    rowTotal[r] += numbers[r * totalColumns + c];
  }
}

按列排列的总数

for(int c = 0; c < totalColumns; c++)
{
  for(int r = 0; r < totalRows; r++)
  {
    colTotal[c] += numbers[r * totalColumns + c];
  }
}