使用 MAP 和 REDUCE 循环处理
对数组应用 LAMBDA,以转换或累积值
使用 MAP 和 REDUCE 循环处理 是 CoddyKit 上的免费 Excel Formulas Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Excel Formulas Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Excel Formulas Academy 课程共包含 4 节课。
无需代码即可循环处理
有时,您希望对一个区域中的每个值应用相同的计算,或者将整个区域归纳为一个数字。在编程中,这称为循环。在现代电子表格中,MAP 和 REDUCE 可以借助 LAMBDA 为您完成这项工作。
- MAP 将数组中的每个元素转换为一个新元素
- REDUCE 将所有元素合并为一个累积结果
两者都接收一个 LAMBDA,用于描述如何处理每个值。Microsoft 365 和 Google Sheets 都支持它们。
MAP 的工作方式
MAP 会遍历数组,并将 LAMBDA 应用于每个项目,从而生成一个大小相同的新数组。LAMBDA 的参数每次接收一个元素。
其结构是:向 MAP 提供数组,然后提供一个 LAMBDA,该 LAMBDA 的参数代表每个值。MAP 会自动将转换后的结果溢出到多个单元格中。
=MAP(array, LAMBDA(value, calculation))第一个 MAP 示例
假设 A2:A6 中有五个价格,您希望将每个价格提高 10%。MAP 可以一次性将加价应用于所有值。
LAMBDA 参数 p 依次代表每个价格。MAP 返回五个结果,每个输入单元格对应一个结果,并沿列向下溢出。
无需拖动填充柄,也无需复制。一个公式即可处理整个区域。
=MAP(A2:A6, LAMBDA(p, p*1.1))使用两个数组的 MAP
MAP 可以并行遍历两个数组。此时,LAMBDA 接收两个参数,分别来自两个数组,并按位置一一匹配。
这里将 A2:A6 中的数量乘以 B2:B6 中的价格,得到每行总额。参数 q 与每个数量配对,pr 与每个价格配对。
两个数组必须大小相同,否则会出现错误。
=MAP(A2:A6, B2:B6, LAMBDA(q, pr, q*pr))REDUCE 的工作方式
REDUCE 会将数组归并为一个值。它会维护一个累加器,并在处理每个元素时更新它。
它接收三项内容:累加器的起始值、数组,以及一个包含两个参数的 LAMBDA:acc(当前累计总额)和 value(当前元素)。LAMBDA 在每一步返回新的累加器。
=REDUCE(start, array, LAMBDA(acc, value, new_accumulator))第一个 REDUCE 示例
让我们使用 REDUCE 对一个区域求和(是的,SUM 也能做到,但这个示例可以清楚地展示其工作机制)。
我们将累加器的初始值设为 0。对于 A2:A6 中的每个值,LAMBDA 都会将其加到 acc 上。处理完最后一个元素后,acc 中就会保存总额。
如果这些值是 10、20、30,累加器的变化过程就是 0、10、30、60,最终结果为 60。
=REDUCE(0, A2:A6, LAMBDA(acc, v, acc + v))使用 REDUCE 计算连续乘积
改变运算方式,REDUCE 就能完成新的任务。要将所有值相乘,请将累加器的初始值设为 1,并在每一步进行乘法运算。
这样可以计算乘积,适用于复合增长因子等场景。起始值很重要:求和使用 0,求积使用 1,因为它们分别是对应运算的中性起始值。
=REDUCE(1, A2:A6, LAMBDA(acc, v, acc * v))结合使用 MAP 和 REDUCE
您可以在一个公式中先使用 MAP 进行转换,再使用 REDUCE 进行汇总。一个常见任务是计算一个区域中所有值的平方和。
这里,MAP 先计算每个值的平方,然后 REDUCE 从 0 开始将它们相加。MAP 的结果会成为 REDUCE 所处理的数组。
=REDUCE(0, MAP(A2:A6, LAMBDA(x, x^2)), LAMBDA(acc, v, acc + v))Google Sheets 中的 MAP 和 REDUCE
Google Sheets 中也有这两个函数,语法完全相同。MAP 将 LAMBDA 应用于每个元素;REDUCE 使用起始值、数组和一个包含两个参数的 LAMBDA 进行累加。
Sheets 还提供了 SCAN 等相关辅助函数。SCAN 类似于 REDUCE,但会返回每个中间累加器,而不只是最终结果。Excel 也支持 SCAN。
=SCAN(0, A2:A6, LAMBDA(acc, v, acc + v))提示与注意事项
请记住以下几点:
- 在 MAP 中,LAMBDA 必须为每个元素返回一个值
- 在 REDUCE 中,LAMBDA 必须始终返回新的累加器,不能遗漏
- 选择正确的起始值:求和使用 0,求积使用 1,连接文本使用空字符串
- 一起传入的数组必须具有相同的维度
如果不确定,先以内联方式对单个值测试您的 LAMBDA。
分别在何时使用
当您希望为每个输入生成一个结果时,可以使用 MAP,例如为每个值应用加价或格式。
当您希望将多个值归并为一个值时,可以使用 REDUCE,例如计算自定义总额、拼接内容,或通过自定义逻辑找出最大值。
两者结合后,您就可以用一个公式表达旧版电子表格无法完成的循环处理。
快速检查
测试您对 REDUCE 的理解。
回顾:使用 MAP 和 REDUCE 进行循环处理
您已经学会使用由 LAMBDA 驱动的函数遍历数组。
- MAP 将每个元素转换为新元素,并返回一个数组
- REDUCE 使用累加器将数组归并为一个值
- 选择合理的起始值:求和使用 0,求积使用 1
- MAP 可以配对多个数组;将 MAP 与 REDUCE 结合,可以用一行公式生成强大的汇总结果
- SCAN 会显示每个中间步骤
接下来您将把 LAMBDA 保存为命名函数,以便在整个工作簿中使用整洁且可复用的公式。
=REDUCE(0, MAP(A2:A6, LAMBDA(x, x^2)), LAMBDA(acc, v, acc + v))常见问题解答
「使用 MAP 和 REDUCE 循环处理」课时是免费的吗?
是的 — 「使用 MAP 和 REDUCE 循环处理」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Excel Formulas Academy 课程的其余内容,请升级到 CoddyKit PRO。 Excel Formulas Academy 课程共包含 4 节课。
「使用 MAP 和 REDUCE 循环处理」这节课中我会学到什么?
对数组应用 LAMBDA,以转换或累积值 你通过在浏览器中直接运行的动手代码来练习 Excel Formulas Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Excel Formulas Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Excel Formulas Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 MAP 和 REDUCE 循环处理」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Excel Formulas Academy 课中编写并运行代码吗?
能。每节 Excel Formulas Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 LET 命名步骤
- 使用 LAMBDA 定义自定义函数
- 使用 MAP 和 REDUCE 循环处理
- 使用命名 LAMBDA 简化公式