0Pricing
Excel Formulas Academy · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 LET 命名步骤
  2. 使用 LAMBDA 定义自定义函数
  3. 使用 MAP 和 REDUCE 循环处理
  4. 使用命名 LAMBDA 简化公式
← 返回 Excel Formulas Academy