我很可能不理解 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/