0

我在“Q Tips”中发现了一种在表中保留键的技术。例如,这对于限制右表中的列很有用lj,而无需重新应用键。使用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

我试图理解为什么它保留了key表格的一部分t

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

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

那么为什么这种语法#/:t对键控表会以这种方式起作用呢?在 code.kx.com 文档中的任何地方都提到过它吗?

Upd1:我在 code.kx.com 上找到了一个带有#键控表的案例,但它是关于选择行,而不是列。

4

2 回答 2

1
{-3!x}/:t

每个权利都需要两个参数,所以这不起作用。

由于表是键控的,因此它被视为字典。每个权限迭代字典值,因此忽略主字典的键(=键控列)。要查看正在发生的事情,可能有助于查看使用每个时发生的情况:

q)){-3!x} each t
c1 c2|
-----| --------------------
1  2 | "`c3`c4`c5!30 40 50"
3  4 | "`c3`c4`c5!31 41 51"
于 2020-08-13T14:58:15.343 回答
1

如果您将键控表视为字典(它是),那么它与以下内容没有什么不同:

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

对每一行执行此操作会返回一个字典列表,该列表本身就是一个表。

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

{-3!x}@/:t

所以它不是唯一的#

于 2020-08-13T14:51:52.400 回答