You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ对三维锯齿数组按第一、第二维度求和(无需循环)

用LINQ实现三维锯齿数组的维度求和

嘿,这个需求我太熟悉了!用LINQ处理锯齿数组的维度求和,核心就是把每个维度的层级关系理清楚,不用循环就能轻松搞定。我给你分两种场景一步步讲,还附了示例代码方便对照:

先明确数组结构

首先咱们先定义一个示例三维锯齿数组,帮你直观理解层级:

// 示例:第一维度有2个块,每个块包含3个第二维度数组,每个数组是第三维度的具体数值
int[][][] jagged3D = new int[][]
{
    new int[][] { new int[] { 1, 2 }, new int[] { 3, 4 }, new int[] { 5, 6 } },
    new int[][] { new int[] { 7, 8 }, new int[] { 9, 10 }, new int[] { 11, 12 } }
};

1. 按第一维度求和

按第一维度求和,意思是把每个第一维度块里的所有数值加总,最终得到一个和数组,每个元素对应原数组第一维度的一个块。

用LINQ的写法非常直接:

// 遍历第一维度的每个块,摊平所有嵌套的数值后求和
var sumByFirstDimension = jagged3D
    .Select(block => block.SelectMany(row => row).Sum())
    .ToArray();

// 结果:[21, 57](1+2+3+4+5+6=21;7+8+9+10+11+12=57)

这里的SelectMany(row => row)是把第二维度的每个数组“摊平”成单个数值元素,再用Sum()把整个块的数值加起来,最后转成数组就得到了第一维度的求和结果。

2. 按第二维度求和

按第二维度求和,是把所有第一维度块中,相同位置的第二维度数组的数值加总。这里要注意锯齿数组的特性:不同第一维度块的第二维度长度可能不一样,所以咱们要做个兼容处理,避免索引越界。

代码实现如下:

// 先获取第二维度的最大长度,处理长度不一致的情况
int maxSecondDimLength = jagged3D.Max(block => block.Length);

// 遍历第二维度的每个索引,对所有块中对应位置的数组求和
var sumBySecondDimension = Enumerable.Range(0, maxSecondDimLength)
    .Select(index => jagged3D
        .Where(block => index < block.Length) // 跳过那些第二维度长度不够的块
        .SelectMany(block => block[index])
        .Sum())
    .ToArray();

// 示例的结果:[18, 26, 34]((1+2)+(7+8)=18;(3+4)+(9+10)=26;(5+6)+(11+12)=34)

如果你的三维锯齿数组是严格对齐的(每个第一维度块的第二维度长度完全相同),可以去掉Where那一行,直接访问block[index]就行,代码会更简洁。

内容的提问来源于stack exchange,提问作者Piotr Bródka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:13:56