2017-07-17 106 views
0

我有一个表,如:KDB/Q更新密钥表元素的列表元素

q)tbl[`XXX] 
1977 1987 1997 

,我想更新从多年的列表中第n个元素,因此上述变成

q)tbl[`XXX] 
1997 1987 2007 

而且需要它到位? 一直在寻找文档,但很难搞清楚。

回答

3

您可以将该表视为翻转的字典。 做一个字典更新,指数在关键的第一:

q)tbl:([]XXX:1977 1987 1997) 
    q)dict:flip tbl 
    q)dict[`XXX;n]:2007 
    q)dict 
    XXX| 1977 1987 2007 

因此做一个就地更新桌子上使用的语法如下:Jamies答案

q)tbl:([]XXX:1977 1987 1997) 
    q)tbl[`XXX] 
    1977 1987 1997 
    q)tbl[n;`XXX]:2007 
    q)tbl[`XXX] 
    1977 1987 2007 
+0

这样做,谢谢。 –

+0

我有一个后续问题:现在,更新被保存在内存中。但是,如果我想要在重新启动kdb后继续进行更改,那么要做什么?尽我所知,我们需要能够将更改保存到磁盘! –

+0

有许多方法可以将表格保存下来。 – jomahony

0

QSQL版本:

q)update XXX:2007 from `tbl where i=n 

这也将允许您使用其中根据表中的其他列第