如何获得二维数组中每一列和每一行的总和?
Posted
技术标签:
【中文标题】如何获得二维数组中每一列和每一行的总和?【英文标题】: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]
添加到总和中。
【参考方案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/
【讨论】:
以上是关于如何获得二维数组中每一列和每一行的总和?的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中,如何生成数组的排列,其中每一列和每一行只有一个元素?
2021-08-13:给定一个每一行有序每一列也有序,整体可能无序的二维数组 ,在给定一个正数k,返回二维数组中,最小的第k个数。