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

kdb+/q:防止初始化的表返回逗号,kdb,Kdb,考虑以下示例: test:([] name:`symbol$(); secondColumn:`int$()); insert[`test;(`John;1)]; myvar:exec name from test; 现在,myvar是: 因此,要选择实际结果,我必须: q)myvar[0] `John 我知道这是因为初始化,所以有没有办法使myvar立即包含实际值?使用[0]进行数组访问,或者如果需要原子变量,第一种方法是正确的 myvar:first exec name from tes

考虑以下示例:

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

因此,要选择实际结果,我必须:

q)myvar[0]
`John
我知道这是因为初始化,所以有没有办法使myvar立即包含实际值?

使用[0]进行数组访问,或者如果需要原子变量,第一种方法是正确的

myvar:first exec name from test;

在KDB中只有一个元素的列表可以通过多种方式创建,这是您在myvar中得到的

KDB表基本上是列表字典的翻页

`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命令选择测试列时,它返回列表中的所有元素一个包含一个元素的列表

除了在接受的答案中解释的方法外,还有一些稍微不同的方法,但是您可以从表中返回第一个元素

q)exec name[0] from test
q)test[`name][0]
q)exec first name from test
q)exec name from test2
q)test2[`name]
`John`James
q)exec name[0] from test
q)test[`name][0]
q)exec first name from test