限制 table 列,保留键

Restrict table columns, preserving keys

我在“Q Tips”中找到了一种在 table 中保留密钥的技术。这对于 lj 中右侧 table 中的限制列非常有用,例如,无需重新应用密钥。使用 each:

q)show t:(`c1`c2!1 2;`c1`c2!3 4)!(`c3`c4`c5!30 40 50;`c3`c4`c5!31 41 51)
c1 c2| c3 c4 c5
-----| --------
1  2 | 30 40 50
3  4 | 31 41 51
q)`c3`c4#/:t
c1 c2| c3 c4
-----| -----
1  2 | 30 40
3  4 | 31 41

我想了解为什么它会保留 table t:

key 部分
q){-3!x}/:t
'/:
  [0]  {-3!x}/:t
              ^

但在这种情况下 q 没有显示它如何处理键控 table 的 each row

那么为什么这种语法 #/:t 以这种方式用于键控 table? code.kx.com 文档中是否提到过它?

Upd1:我发现了一个 # 的案例,并在 code.kx.com 上键入了 table,但它是关于选择行的,不是列。

如果您将键控 table 视为字典(它确实如此),那么它与:

没有什么不同
q)2*/:`a`b!1 2
a| 2
b| 4

q){x+1} each `a`b!1 2
a| 2
b| 3

在将函数应用于字典的每个元素时保留键。在您的示例中,应用的函数是使用字典,例如:

q)`c3`c4#first t
c3| 30
c4| 40

对每一行执行此操作 returns 一个字典列表,它本身就是一个 table。

您的其他尝试也可以作为:

{-3!x}@/:t

所以它不是独一无二的 #

{-3!x}/:t

每个权利都需要两个参数,所以这行不通。

由于 table 是键控的,因此它被视为字典。 each right 迭代字典值,因此忽略主字典的键(=键控列)。要查看发生了什么,可能有助于查看使用每个时会发生什么:

q)){-3!x} each t
c1 c2|
-----| --------------------
1  2 | "`c3`c4`c5!30 40 50"
3  4 | "`c3`c4`c5!31 41 51"