kdb/q 更新键控 table 元素的列表元素

kdb/q update a keyed table element's list element

我有一个 table 喜欢:

q)tbl[`XXX]
1977 1987 1997

我想更新年份列表中的第 n 个元素,所以上面变成

q)tbl[`XXX]
1997 1987 2007

需要它就位吗? 一直在查看文档,但很难搞清楚。

您可以将 table 视为一本翻转字典。 要进行字典更新,您首先要在键上建立索引:

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

因此,要对 table 执行就地更新,使用以下语法:

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

qsql版的Jamies回答:

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

这也将允许您使用基于 table

中其他列的 where 子句