【问题标题】:Save the sum of each row of a matrix into an array将矩阵每一行的总和保存到数组中
【发布时间】:2017-12-12 15:41:21
【问题描述】:

我有一个矩阵,我想返回一个数组,其中包含矩阵的每一行元素的总和作为元素。

int [] sum;

for (var i = 0; i < m; i++)
{
    for (var j = 0; j < result.Pages[i].Actual.Count; j++)
    {
        sum[i] += result.Pages[i].Actual[j];
    }

}

这就是我尝试这样做的方式,但似乎不起作用。有什么想法吗?

【问题讨论】:

标签: c# arrays


【解决方案1】:

使用var m = a.GetLength(0); 获取行数,使用var n = a.GetLength(1); 获取列数。

【讨论】:

    【解决方案2】:

    现在编辑后看起来就像一个不同的故事:

    其实第一个问题是NullreferenceException,因为int[]sum没有初始化!

    无论如何,看起来你有一个数组数组。在这种情况下,您需要Pages 数组的Length 来保存结果。第一个循环使用i 对其进行迭代,并将一直运行到result.Pages.Length。对于每个i,您已经正确实现了第二个循环,您可以在其中总结结果。

    int [] sum = new int[result.Pages.Length];
    
    for (var i = 0; i < result.Pages.Length; i++)
    {
        for (var j = 0; j < result.Pages[i].Actual.Length; j++)
        {
            sum[i] += result.Pages[i].Actual[j];
        }    
    }
    

    如果您的收藏是 List 的,那么您需要使用 Count 而不是 Length

    Linq 解决方案如下所示:

    int [] sum = result.Pages.Select(x=>x.Sum()).ToArray();
    

    编辑:

    double? 表示您有一个可为空的数据类型。这与普通的double 不同。此外,默认值为null,这意味着您需要在将值相加之前初始化sum中位置i的值,否则结果将是null

    double? [] sum = new double?[result.Pages.Length];
    
    for (var i = 0; i < result.Pages.Length; i++)
    {
        sum[i] = 0;
        for (var j = 0; j < result.Pages[i].Actual.Length; j++)
        {
            sum[i] += result.Pages[i].Actual[j];
        }    
    }
    

    【讨论】:

    • 感谢您的回答。现在看来很清楚了。我只有一个问题,数据是double? 格式或者我得到的错误。我将 sum 从 int 更改为 double 但现在仍然有效
    • @user3654571 “或者我得到的错误。”我没有看到任何错误......它有错误消息吗?你真的应该发布你正在测试的代码,否则我们继续玩猜谜游戏
    • @user3654571 double? 表示您有一个可为空的数据类型。这与普通的double 不同。此外,默认值为null,这意味着您需要更改位置i的初始化值
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多