所以我有一个包含值数组的类,以及这些类的列表。
我想返回列表中所有项目的总和(或任何其他操作),也作为一个数组。
例如{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.Range
、Max
、Select
和 Sum 来完成
:
请注意,如果其中一个数组的长度与其他数组的长度不同,我还包含了一个简单的条件,使您免于 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/