从矩阵填充一维数组
我有一个矩阵,我的任务是从我的矩阵填充一维数组。从矩阵填充一维数组
实施例:
1 2 3
1 2 3
1 2 3
我需要总结列和填充每一列的总和在一维数组 这是我的代码(即不工作),(int[,] mat)
是矩阵,该函数得到。
public static int sumcolumn(int[,] mat)
{
int sum = 0;
int[] sumcol = new int[mat.GetLength(0)];
for (int y = 0; y < mat.GetLength(0); y++)
{
for (int i = 0; i < mat.GetLength(0); i++)
{
for (int j = 0; j < mat.GetLength(1); j++)
{
sum = sum + mat[j, i];
}
sumcol[i] = sum;
return sum;
sum = 0;
}
return sum;
}
return sumcol;
}
我该怎么做这个任务?
在此先感谢。
您只需要2个for循环。对于每一列贯穿所有行并总结内容。在合适的索引处写下总和。然后在每列重设总和。您还需要返回数组。所以我改变了返回值:
如果您使用有意义的名称调用索引变量,它也会有所帮助。
public static int[] sumcolumn(int[,] mat)
{
int[] sumcol = new int[mat.GetLength(1)];
for (int col = 0; col < mat.GetLength(1); col++)
{
for (int row = 0; row < mat.GetLength(0); row++)
{
// since sumcol is initially filled with zeros you can just
// sum up the values from mat onto the zeros in each cell
sumcol[col] += mat[row, col];
}
}
return sumcol;
}
在主,你可以像这样的测试:
void Main()
{
int[,] array = {
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },};
// this is just for test display
Console.WriteLine(String.Join(" ", sumcolumn(array)));
// normally you would call it like this and catch the return value in a new array
int[] result = sumcolumn(array);
}
我觉得这行'sumcol [col] = sum;'should已经在内部循环之外 – Jamiec
@Jamiec它不会改变最终结果,但你是对的,没有必要在每一步都写出结果:) –
非常感谢你! 它适用于我的代码完美:-) –
所以,你需要评估二维矩阵,以获得逐列总和为一维数组。因此,首先必须将方法的返回类型更改为int[]
,而不是int
。
让我引用你必须移动到修复之前要注意几件事情:
- 如果执行迭代循环其余的迭代过程中的返回将不会被执行。
- 函数只能在一次调用中返回一个值。
- 假设
i
和j
是两个正整数不等整数,则a[i,j]
和a[j,i]
将指向矩阵a
中的两个不同元素。
作为一个整体必须修改类似下面的方法签名:
public static int[] sumcolumn(int[,] mat)
{
int sum = 0;
int[] sumcol = new int[mat.GetLength(1)];
for (int i= 0; i< mat.GetLength(1); i++)
{
sum = 0; // reset sum for next colomn
for (int j= 0; j< mat.GetLength(0); j++)
{
sum += mat[i, j];
}
// iteration of column completed
sumcol[i] = sum;
}
return sumcol;
}
public static int[] sumColumn(int[,] mat)
{
//int sum = 0;
int colCount = mat.GetLength(0);
int[] sumCol = new int[colCount];
for (int y = 0; y < colCount; y++)
{
int rowCount = mat.GetLength(1);
sumCol[y] = 0;
for (int x = 0; x < rowCount; x++)
{
sumCol[y] += mat[y, x];
}
//sum += sumCol[y];
}
//return sum;
return sumCol;
}
Linq的做法
int[,] array = new int[3, 3] { { 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 } };
int[] result = Enumerable.Range(0, array.GetUpperBound(1) + 1)
.Select(y => Enumerable.Range(0, array.GetUpperBound(0) + 1)
.Select(x => array[x, y]).Sum()).ToArray(); // [3,6,9]
你的任务是填补一维数组,那么你为什么从该方法返回一个整数值,而不是一维数组? –
删除'返回总数'的声明,它应该工作正常 – MKasprzyk
我不明白我怎么能总结列和填充列的每个总和到一维数组 –