【问题标题】:How to sum elements of unknown number of arrays using LINQ?如何使用 LINQ 对未知数量数组的元素求和?
【发布时间】:2019-06-22 16:21:45
【问题描述】:

我有一个相同大小的数值数组列表。是否可以在不使用 for 循环的情况下计算它们的第 1、2、...、第 n 个元素的总和?

这是我使用循环的代码:

static void Main(string[] args)
{
    List<int[]> list = new List<int[]>();
    int n = 4;
    list.Add(new int[] { 1, 2, 3, 4 });
    list.Add(new int[] { 5, 6, 6, 7 });
    list.Add(new int[] { 8, 9, 10, 11 });

    int[] sum = new int[n];
    foreach (int[] array in list)
        for (int i = 0; i < n; i++)
            sum[i] += array[i];
    foreach (int value in sum)
        Console.Write($"{value} ");
    Console.Read();
}

【问题讨论】:

  • var sum = list.SelectMany(ar =&gt; ar).Sum(v =&gt; v);,也许吧? (写在这里,未经测试。)
  • @Jimi 它对所有内容求和并返回一个 int。
  • 啊,对,你想要 vertical 总和。要添加到您已有的答案,Enumerable.Range 一个:var sums = Enumerable.Range(0, list[0].Length).Select(col =&gt; list.Sum(lst =&gt; lst[col]));。仅适用于相同大小的数组。对于不同大小的数组,请参阅here

标签: c# linq


【解决方案1】:
var sum = list[0].Select((value, i) => list.Sum(sublist => sublist[i]));

需要对空的list 进行特殊处理。

解释:

sublist => sublist[i]

给定一个sublist(即其中一个数组),这将选择i-th 元素。

list.Sum(sublist => sublist[i])

此查询计算单个数字,它是list 的子列表的所有i-th 元素的总和。

list[0].Select((value, i) => list.Sum(sublist => sublist[i]))

这将为list[0] 中的每个条目选择一个数字。该数字是子列表中所有i-th 条目的总和。

【讨论】:

  • 谢谢 Nico,但我不太明白它是如何工作的!你能解释一下吗?更具体地说,它如何访问列表中的其他项而不是其第一个数组?
  • 添加说明。
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2021-07-05
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多