google-sheets - 为什么 SCAN/LAMBDA 会给出意想不到的结果?

标签 google-sheets lambda google-sheets-formula

我很可能不理解 lambda 逻辑,对吗?我有数据集 A2:A5,如下所示:

1
3
6
10

如果我这样做:=SCAN(0, A2:A5, LAMBDA(aa, bb, aa+bb)) 我得到:

1
4
10
20

如果我这样做:=SCAN(0, A2:A5, LAMBDA(aa, bb, ROW(bb)-1)) 我得到

1
2
3
4

如果我运行:=SCAN(0, A2:A5, LAMBDA(aa, bb, (aa+bb)*(ROW(bb)-1))) 结果是

1
8
42
208

为什么是 42 和 208 ?这是如何产生这样的值的?怎么会是42和208呢?

预期结果是

1
8
30
80

我可以通过以下方式得到它:

=ArrayFormula(SCAN(0, A2:A5, LAMBDA(aa, bb, aa+bb))*(ROW(A2:A5)-1))

但不是

=SCAN(0, A2:A5, LAMBDA(aa, bb, (aa+bb)*(ROW(bb)-1)))

最佳答案

SCAN 是一个很棒的中间结果函数。要了解 SCAN 的运作方式,您需要了解 REDUCE 的运作方式。语法为:

=REDUCE(initial_value, array, LAMBDA(accumulator, current_value, some_function()))

逐步执行=SCAN(0, A2:A5, LAMBDA(aa, bb, (aa+bb)*(ROW(bb)-1)))

>
  • A2:A5 为 1,3,6,10

  • 第 1 步:

    • aa = 0(初始值)
    • bb = 1(当前值:A2)
    • 结果((aa+bb)*(ROW(bb)-1)): (0+1)*(2-1)=1
  • 第 2 步:

    • aa = 1(累加器(前一个返回值))
    • bb = 3(当前值:A3)
    • 结果((aa+bb)*(ROW(bb)-1)): (1+3)*(3-1)=8
  • 第 3 步:

    • aa = 8(累加器(前一个返回值))
    • bb = 6(当前值:A4)
    • 结果((aa+bb)*(ROW(bb)-1)): (8+6)*(4-1)=42
  • 第 4 步:

    • aa = 42(累加器(前一个返回值))
    • bb = 10(当前值:A5)
    • 结果((aa+bb)*(ROW(bb)-1)):(42+10)*(5-1)=52*4=208

关于google-sheets - 为什么 SCAN/LAMBDA 会给出意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73920148/

相关文章:

google-sheets - 根据查询中的 X 个单词数将查询拆分为 N 个结果

javascript - 我可以从多个数据源(本例中为多个 GoogleSheets)创建单个 HighCharts 图表吗

google-sheets - 需要求和公式

google-apps-script - Importhtml() 和 Importxml() "Could not fetch URL"- 仅在特定网页上

正则表达式用 Google 表格中的不同项目替换许多 "$"

datetime - 将 UTC ISO 字符串日期转换为 Unix 时间戳

google-apps-script - IMPORTXML 错误警报 : “Internal import error” - How to avoid the error by importing the data directly via script?

c# - PropertyExpression 丢失

c# - 如何创建一个 linq lambda 连接查询来提取结果,即使结果为空?

Python Pandas - 使用 For 语句添加列名称