You need to enable JavaScript to run this app. 如何使用map处理嵌套元组列表以计算子列表数值总和
优惠活动
大模型
产品
解决方案
定价
更多

如何使用map处理嵌套元组列表以计算子列表数值总和

问题原因与代码调整方案

之前写出的代码核心问题是过早用concat打散了原列表的层级绑定关系,把和每个内层列表绑定的外层键(类似(1,1)的二元组)直接丢弃,最终得到的是脱离结构的纯一维数值列表。

实现思路

这个需求不需要跨元素拼接列表,也不需要用到筛选逻辑(filter在这里没有适用场景),只需要对原列表的每个独立元素单独做处理即可:

  • 原列表每个元素的固定结构是:(外层键, 内层元组列表)
  • 对每个元素单独提取内层列表的所有数值分量,求和后和原外层键重新组成新的二元组,即可得到目标结构。

可直接运行的代码

map (\(outerKey, innerItems) -> (outerKey, sum $ map snd innerItems)) list

执行逻辑拆解

  • 遍历原列表时逐个匹配每个元素的两个组成部分:外层键、内层元组列表,不会跨元素把内容拼合到一起
  • 对单个元素的内层元组列表,用map snd提取所有第二个位置的数值分量
  • 用内置的sum函数对提取到的数值直接求和
  • 将求和结果和对应的原外层键组合为新的二元组,最终输出结构为:
[((1,1),10), ((2,2),2), ((3,3),3)]

注:示例目标输出里最后多了一个多余的右括号,属于笔误,实际代码运行不会生成这种语法不合法的结构。

现有代码的执行路径问题:

  1. 对原列表执行map snd,取出每个元素的内层列表,得到嵌套的列表结构[[("A", 1), ("D", 4), ("E", 5)], [("B", 2)], [("C",3)]]
  2. 执行concat把所有嵌套的内层列表拼成一个无层级的大列表,直接切断了每个数值和对应外层键的绑定关系
  3. 最后对拼合后的大列表执行map snd提取数值,自然就只能得到没有任何结构的[1,4,5,2,3]

内容的提问来源于stack exchange,提问作者user11546270

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 07:06:10