kdb+/q:防止初始化表返回逗号

kdb+/q: Prevent initialised tables from returning a comma

考虑以下示例:

test:([] name:`symbol$(); secondColumn:`int$());
insert[`test;(`John;1)];
myvar:exec name from test;

现在 myvar 现在是:

q)myvar
,`John

因此,为了 select 实际 结果,我必须这样做:

q)myvar[0]
`John

我知道这是因为初始化,所以有没有办法让 myvar 立即包含实际值?

如果您需要 "atomic" 变量,使用 [0]first 的数组访问是正确的方法。

myvar:first exec name from test;

可以通过多种方式创建 KDB 中具有单个元素的列表(这是您在 myvar 中得到的内容)

q)enlist `John
,`John
q)(),`John
,`John

KDB table 基本上是列表字典的 flip

`name`secondColumn!(`John`James;1 2)  /Dictionary of lists
name        | John James
secondColumn| 1    2

q)test2:flip `name`secondColumn!(`John`James;1 2)
name  secondColumn
------------------
John  1
James 2

以下两个命令的结果相同:

q)exec name from test2
q)test2[`name]
`John`James

当您使用 exec 命令选择 test 列时,它返回列表的所有元素(一个包含一个元素的列表)

除了接受的答案中解释的方法之外,还有其他几种方法(但略有不同)可以获取从 table.

返回的第一个元素
q)exec name[0] from test
q)test[`name][0]
q)exec first name from test