为什么 Excel 的 INDEX() 语法具有这种明显的正交性?

为什么 Excel 的 INDEX() 语法具有这种明显的正交性?

总结

在 Excel 365 中:

  1. 为什么的第二个参数中的 0 不会返回所有行,而和INDEX(A1#,0,{1,3})中的每一行都返回?INDEX(A1#,0,1)INDEX(A1#,0,3)
  2. 是否有一个规范的方法来实现这一点?

细节

假设我有一个以 为根的动态数组A1。如果我想要第一列,所有行,我可以这样写:

=INDEX(A1#,0,1)

其中第二个参数中的 0 表示“所有行”指示符。同样,如果我想要第 3 列,我可以这样写:

=INDEX(A1#,0,3)

如果我想两个都第一列和第三列,我希望能够写入:

=INDEX(A1#,0,{1,3})

但这并没有给出我所期望的结果。它确实给出了第一列和第三列,但只有第一个也就是说,它给出的结果与以下内容完全相同:

=INDEX(A1#,1,{1,3})

为了得到我想要的结果,我需要让第二个参数提及每个所需的行。因此,例如,我经常发现自己在做这样的事情:

=INDEX(A1#,SEQUENCE(ROWS(A1#)),{1,3})

这是可行的,但是有点冗长。

我是不是漏掉了什么?有没有更简洁的方式来指定“所有行”,就像0只要求一列时那样?

接下来是:有人可以解释一下吗为什么他们可能会把它建造成这样吗?它似乎破坏了正交性,但这可能只是我的看法。

PS我知道完全执行这种多不连续列切片操作的其他方法。例如:

= HSTACK(INDEX(A1#,0,1),INDEX(A1#,0,3))

但这并不比该方法简洁多少SEQUENCE()

答案1

是否有一个规范的方法来实现这一点?

正如 gns100 评论的那样,在 Excel365 中您可以使用=choosecols(A1#,1,3)
不幸的是,早期版本中没有好的解决方案。

为什么的第二个参数中的 0 不会返回所有行,而和INDEX(A1#,0,{1,3})中的每一行都返回?INDEX(A1#,0,1)INDEX(A1#,0,3)

查看输出=INDEX(A1#,{1,4},{2,4})可能有助于了解情况:

它不返回(第 1 行和第 4 行)和(第 2 列和第 4 列)的交点,而是给出坐标 1,2 和 4,4 的值;因此当您提供两个列表时,它会首先将它们转换为坐标。

至于为什么使用时它只返回第一行的值0,可能是因为 Excel0在后台转换为列表的方式。

在此处输入图片描述

相关内容