C# LINQ 求和数组属性

标签 c# linq

所以我有一个包含值数组的类,以及这些类的列表。

我想返回列表中所有项目的总和(或任何其他操作),也作为一个数组。

例如{1,2,3}、{10,20,30} 和 {100,200,300} 的总和为 {111,222,333}

因此,结果数组的第一个元素将是输入数组中所有第一个元素的总和,第二个元素将是输入数组中所有第二个元素的总和,依此类推。

我可以用:

    public class Item
    {
        internal int[] Values = new int[3];
    }

    public class Items : List<Item>
    {
        internal int[] Values
        {
            get
            {
                int[] retVal = new int[3];
                for (int x = 0; x < retVal.Length; x++)
                {
                    retVal[x] = this.Sum(i => i.Values[x]);
                }
                return retVal;
            }
        }
    }

但我觉得这应该可以通过使用 LINQ 作为单行来实现。是吗?

最佳答案

是的,这可以使用单个 linq 代码行,使用 Enumrable.RangeMaxSelectSum 来完成:

请注意,如果其中一个数组的长度与其他数组的长度不同,我还包含了一个简单的条件,使您免于 IndexOutOfRangeException

internal int[] ValuesLinq
{
    get
    {
        return Enumerable
            .Range(0, this.Max(i => i.Values.Length))
            .Select(ind => this.Sum(item => item.Values.Length > ind ? item.Values[ind] : 0))
            .ToArray();
    }
}

您可以在 Rextester 上看到现场演示

关于C# LINQ 求和数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62755174/

相关文章:

c# - 如何在 Azure 应用程序设置中管理 Web.Config 的自定义部分?

c# - 从 XML 创建通用表的 LINQ 算法

c# - 类库中定义的内容在 ClickOnce 部署期间不传输

c# - 如何从字符串类型转换为数据行

c# - Linq Group 按日期和对象列表列出

c# - 插入多条记录问题(linq EF)

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet性能

sql-server - 如何生成 dbml 文件?

linq - 将此 Linq 查询从查询​​语法转换为 lambda 表达式

c# - 将 IEnumerable 分组为一个字符串