C# 具有Linq的交错数组(求和、平均、其他函数)上的列操作

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,也就是说,其他“优

假设我们有一个具有等长项数组的锯齿状数组(即忽略超出范围的捕捉):

应用c#Linq执行列操作最优雅的方式是什么。简单列操作总和和平均值的示例结果:

Sum()列结果:int[]{12,27,15} Average()列结果:int[]{4,9,5} …对列进行操作的任何其他类似扩展方法

我能找到的最密切相关的问题是

谢谢你的回答,我已经接受了Jay的回答,并且发布了一个类似但更复杂的关于可列举问题的专栏聚合


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();