有趣的时机 - 我昨天刚解决了同样的问题,因为我想访问新功能,但我不能在我的工作 PC 上做 Early Adopters。所以我为每个功能制作了一个“自制”版本。这里是VSTACK。
VSTACK =
LAMBDA( array1, array2, [array3], [array4], [array5], [array6], [array7], [array8],
LET(
pattern, MAX( 2,
3*NOT(ISOMITTED(array3)),
4*NOT(ISOMITTED(array4)),
5*NOT(ISOMITTED(array5)),
6*NOT(ISOMITTED(array6)),
7*NOT(ISOMITTED(array7)),
8*NOT(ISOMITTED(array8)) ),
stack, LAMBDA( array_1, array_2,
LET(
rows1, ROWS( array_1 ), rows2, ROWS( array_2 ),
columns1, COLUMNS( array_1 ), columns2, COLUMNS( array_2 ),
rSeq, SEQUENCE( rows1 + rows2 ),
cSeq, SEQUENCE(, MAX( columns1, columns2 ) ),
IF( ISOMITTED(array_1),
array_2,
IF( ISOMITTED(array_2),
array_1,
IF( rSeq <= rows1,
INDEX( IF( array_1 = "", "", array_1), rSeq, cSeq ),
INDEX( IF( array_2 = "", "", array_2), rSeq-rows1, cSeq ) ) ) ) )
),
SWITCH( pattern,
2, stack(array1,array2),
3, stack(stack(array1,array2),array3),
4, stack(stack(stack(array1,array2),array3),array4),
5, stack(stack(stack(stack(array1,array2),array3),array4),array5),
6, stack(stack(stack(stack(stack(array1,array2),array3),array4),array5),array6),
7, stack(stack(stack(stack(stack(stack(array1,array2),array3),array4),array5),array6),array7),
8, stack(stack(stack(stack(stack(stack(array1,array2),array3),array4),array5,array6),array7),array8), )
)
);
这不是您问题的答案。我不知道如何使用无限数量的参数来创建 LAMBDA 函数,所以我只是做了一种粗略但可扩展的方式来添加更多参数而不重构整个事物。
注意:这确实很粗糙,但这是一个选择。我也想过用
递归避免无限嵌套,但最终决定
提出一个迭代参数会令人困惑和混乱
比较。我的最终目标是制作“足够好”。