使用Linq对锯齿数组(sum, average,其他函数)进行列操作

本文关键字:函数 其他 操作 average 使用 数组 sum Linq | 更新日期: 2023-09-27 18:02:26

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

int[][] jaggedArray = new int[][] 
{
    new int[] {1, 3, 5},
    new int[] {0, 2, 4},
    new int[] {11,22,6}
};

应用c# Linq执行列操作的最优雅的方式是什么?简单列操作Sum和Average的示例结果:

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

我能找到的最接近的相关问题在这里。

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

使用Linq对锯齿数组(sum, average,其他函数)进行列操作

  var results = Enumerable.Range(0, jaggedArray[0].Length)
    .Select(i => jaggedArray.Sum(a => a[i]))
    .ToArray();

Average 等代替Sum

private static IEnumerable<int> GetColumnValues(IEnumerable<int[]> arr, int columnIndex)
{
    return arr.Select(a => a.Skip(columnIndex).FirstOrDefault());
}
...
GetColumnValues(jaggedArray, 1).Sum();

对于所有列计算使用Enumerable。范围

var res = Enumerable.Range(0, 3).Select(columnIndex => GetColumnValues(jaggedArray, columnIndex).Sum());