Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kdb/q为键控表中的不同键更新一列中的多个不同值_Kdb_Q Lang - Fatal编程技术网

kdb/q为键控表中的不同键更新一列中的多个不同值

kdb/q为键控表中的不同键更新一列中的多个不同值,kdb,q-lang,Kdb,Q Lang,我有一张桌子,它是: t:([alpha:`a`b`c`d`e`f];beta:10 20 30 40 50 60) 我还有两个变量: chgkey:`b`c chgvalue:2000 -1000 我想做一些类似的事情: t:update beta:2000 from t where alpha=`b; t:update beta:-1000 from t where alpha=`c; 我的问题是如何组合这两行代码。因为我正在处理一个比这个简单的示例大得多的表,并且需要很多行代码来完成

我有一张桌子,它是:

t:([alpha:`a`b`c`d`e`f];beta:10 20 30 40 50 60)
我还有两个变量:

chgkey:`b`c
chgvalue:2000 -1000
我想做一些类似的事情:

t:update beta:2000 from t where alpha=`b;
t:update beta:-1000 from t where alpha=`c;
我的问题是如何组合这两行代码。因为我正在处理一个比这个简单的示例大得多的表,并且需要很多行代码来完成所有更新,这太长了

像这样的东西会很好

t[chgkey]`beta:chgvalue;

我将尝试使用下一个查询。但请注意,如果您的
dict
非常大,那么它可能会很慢

dict: `b`c ! 1000 2000;
t: update beta: ?[alpha in key dict; dict alpha;beta] from t;
如果表
t
是全局的,则可以使用功能更新进行更新:

{![`t;enlist (=;`alpha;enlist x);0b; enlist[`beta]!enlist y];}'[`b`c; 1000 2000]
像t[chgkey]`beta:chgvalue这样的东西会很好

有效的解决方案只是稍微复杂一点:

t[([]alpha:chgkey);`beta]:chgvalue

是的,字典解决方案很好。也可以只使用fill而不是检查键:更新beta:beta^dict alpha,从tThanks获得了很多Terrylyynch和Dovzhenko,这真的很有帮助。