Excel的
INDEX
当被索引的对象是在中引入的名称时,函数会显示奇怪的行为
LET
的构造或参数
LAMBDA
。在Windows和Mac上的行为是一致的。
假设单元格
B2
包含公式
=SEQUENCE(50000)
那么以下公式都是相对有效的:
=MAP(SEQUENCE(2000),LAMBDA(x,INDEX(B2
=LAMBDA(MAP(SEQUENCE(2000),LAMBDA(x,INDEX(B2
=LET(mgen,LAMBDA(B2
然而,以下公式非常缓慢
=LET(m,B2
=LET(m,B2
=LAMBDA(m,MAP(SEQUENCE(2000),LAMBDA(x,INDEX(m,x))))(B2
阵列越长,性能问题就越严重
地下二层
是。当你在中用500000替换50000时,你可以用后3个公式破坏Excel
地下二层
,而前三个公式仍然运行良好。
请注意,的长度
地下二层
(索引的数组)理论上不应该对性能产生任何影响,因为
索引
在我所有的例子中被调用的次数完全相同。
对我来说,
索引
当第一个参数没有直接引用工作表区域时,似乎会出现性能问题。
然而,如果是这样的话——我如何有效地(在恒定时间内)获得LET/LAMBDA命名数组的第n个元素?
我无法通过将索引数组写入单元格来解决此问题,因为在我的情况下,索引数组是另一个lambda的结果。
编辑以澄清:的唯一目的
MAP
/
SEQUENCE(2000)
在我的示例中,构造是对进行2000次单独调用
索引
,以便使性能差异变得明显。构造与问题完全无关。每当我做很多事情时,就会出现性能问题
索引
调用,其中第一个参数是LET/LAMDA名称。
第二次编辑:然而,似乎需要某种古怪的结构来重现这个问题。我无法用2000个单独的
LET
/
索引
2000个单元格中的公式。