从矩阵填充1D数组

时间:2017-02-15 13:55:06

标签: c# arrays function matrix

我有一个矩阵,我的任务是从矩阵中填充一维数组。

示例:

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;
}

我该怎么做这个任务?

提前致谢。

4 个答案:

答案 0 :(得分:4)

你只需要2个for循环。对于每个列遍历所有行并总结内容。将总和写在适当的col索引处。然后在每列重置总和之后。您还需要返回带有总和的数组。所以我改变了返回值:

如果使用有意义的名称调用索引变量,也会有所帮助。

<TouchableOpacity onPress = {this.addStar}>

在主要内容你可以这样测试:

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;
}

答案 1 :(得分:2)

因此,您需要评估2D矩阵以获得1D数组的列式和。因此,您首先要做的是将方法的返回类型更改为int[]而不是int

让我引用在引入修复之前您必须注意的几件事情:

  • 如果在循环迭代期间执行返回,则不会执行其余的迭代。
  • 一个函数只能在一次调用中返回一个值。
  • ij为两个正的不等整数,然后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;
}

答案 2 :(得分:1)

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]

答案 3 :(得分:-1)

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;
}