kdb: longList@dictionary 行为

kdb: longList@dictionary behavior

q)(`a`b`c!101 0N 103)~100 101 102 103 104@`a`b`c!1 5 3
1b

我注意到下面两行是等价的

  1. 一般来说 a@b!c 等价于 b!a@c 吗?
  2. overloaded glyphs page for @ 上,这种用法是 Index At 还是 Apply At 还是其他?对于 x@y,当 y 是字典时,是否有关于确切行为的文档?

适用于列表的操作也适用于恰好是字典值的列表(它“通过”字典应用并保持键不变)。例如:

q)1+`a`b!1 2
a| 2
b| 3
q)2*`a`b!1 2
a| 2
b| 4

因此 index at 将以相同的方式应用:

q)10 20 30@`a`b!1 2
a| 20
b| 30

因为它与:

q)10 20 30@1 2
20 30
  1. 如果 a@c 没有意义,a@b!c 并不总是等同于 b!a@c。例如
q)10 20 30@1.1 2.2
'type
  [0]  10 20 30@1.1 2.2
               ^
q)10 20 30@`a`b!1.1 2.2
'type
  [0]  10 20 30@`a`b!1.1 2.2
               ^

仅当索引的基础数据类型为 boolean/short/int/long 时才为真。

  1. 上面回答的主要是index at。当 y 是字典时没有明确的文档,因为当 y 是列表时它本质上是相同的行为