C# 具有Linq的交错数组(求和、平均、其他函数)上的列操作
假设我们有一个具有等长项数组的锯齿状数组(即忽略超出范围的捕捉): 应用c#Linq执行列操作最优雅的方式是什么。简单列操作总和和平均值的示例结果: Sum()列结果:int[]{12,27,15} Average()列结果:int[]{4,9,5} …对列进行操作的任何其他类似扩展方法 我能找到的最密切相关的问题是 谢谢你的回答,我已经接受了Jay的回答,并且发布了一个类似但更复杂的关于可列举问题的专栏聚合C# 具有Linq的交错数组(求和、平均、其他函数)上的列操作,c#,linq,jagged-arrays,C#,Linq,Jagged Arrays,假设我们有一个具有等长项数组的锯齿状数组(即忽略超出范围的捕捉): 应用c#Linq执行列操作最优雅的方式是什么。简单列操作总和和平均值的示例结果: Sum()列结果:int[]{12,27,15} Average()列结果:int[]{4,9,5} …对列进行操作的任何其他类似扩展方法 我能找到的最密切相关的问题是 谢谢你的回答,我已经接受了Jay的回答,并且发布了一个类似但更复杂的关于可列举问题的专栏聚合 用Average等替换Sum。你试过什么?为什么您需要使用LINQ,也就是说,其他“优
用
Average
等替换Sum
。你试过什么?为什么您需要使用LINQ,也就是说,其他“优雅”解决方案无效?谢谢您的评论。是的,当然,其他选项是有效的/直接的(我目前在典型的循环中也这么做)-但是我对任何优雅的linq解决方案感兴趣,可以与代表一起使用-我的尝试看起来像我喜欢的问题-也就是说,相当混乱。linq比使用两个for循环执行工作慢得多。在与性能有关的情况下,不要使用LINQ。注意:jaggedArray.Length与列计数不同。@Keith Thank;我把它翻译错了——应该是jaggedArray[0]。长度。
int[][] jaggedArray = new int[][]
{
new int[] {1, 3, 5},
new int[] {0, 2, 4},
new int[] {11,22,6}
};
private static IEnumerable<int> GetColumnValues(IEnumerable<int[]> arr, int columnIndex)
{
return arr.Select(a => a.Skip(columnIndex).FirstOrDefault());
}
...
GetColumnValues(jaggedArray, 1).Sum();
var res = Enumerable.Range(0, 3).Select(columnIndex => GetColumnValues(jaggedArray, columnIndex).Sum());
var results = Enumerable.Range(0, jaggedArray[0].Length)
.Select(i => jaggedArray.Sum(a => a[i]))
.ToArray();