KDB 如何通过引用更新 table 而不会出现分配错误?
KDB how to update a table by reference without getting an assign error?
我想通过引用更新 table 而不会在 kdb 中出现分配错误,即
q)tab:1!(flip`a`b`c!(til 10;10?50;10?100));
q)k:2#key[tab];
q)(`tab[k;`b`c])*:2;
parse error
assign
或
q)[.:][`tab][k;`b`c]*:2;
parse error
assign
(显然不能为派生变量赋值)
特别是以下工作:
q)(tab[k;`b`c])*:2;
我在这里假设有比使用 eval
或 value[`tab] 更好的方法来实现这一点我希望我能得到第二个意见。
如上例所示,如何使用对 table 的“符号”引用来实现引用集?
再次感谢,致以最诚挚的问候。
您所说的“有效”无效:
q)tab[k;`b`c]:0 1;
'length
[0] tab[k;`b`c]:0 1;
^
您一定一直在使用未加密的 table 而不是加密的 table。
最终归结为 table 是否键控以及您使用什么索引到 table(键或索引)。
键控 table - 键查找
q)tab:1!(flip`a`b`c!(100+til 10;10?50;10?100))
q)k:100 101
q).[`tab;(([]a:k);`b);:;0 1]
未加密 table - 索引查找
q)tab:(flip`a`b`c!(100+til 10;10?50;10?100))
q)k:0 1
q).[`tab;(k;`b);:;0 1]
我想通过引用更新 table 而不会在 kdb 中出现分配错误,即
q)tab:1!(flip`a`b`c!(til 10;10?50;10?100));
q)k:2#key[tab];
q)(`tab[k;`b`c])*:2;
parse error
assign
或
q)[.:][`tab][k;`b`c]*:2;
parse error
assign
(显然不能为派生变量赋值)
特别是以下工作:
q)(tab[k;`b`c])*:2;
我在这里假设有比使用 eval
或 value[`tab] 更好的方法来实现这一点我希望我能得到第二个意见。
如上例所示,如何使用对 table 的“符号”引用来实现引用集?
再次感谢,致以最诚挚的问候。
您所说的“有效”无效:
q)tab[k;`b`c]:0 1;
'length
[0] tab[k;`b`c]:0 1;
^
您一定一直在使用未加密的 table 而不是加密的 table。
最终归结为 table 是否键控以及您使用什么索引到 table(键或索引)。
键控 table - 键查找
q)tab:1!(flip`a`b`c!(100+til 10;10?50;10?100))
q)k:100 101
q).[`tab;(([]a:k);`b);:;0 1]
未加密 table - 索引查找
q)tab:(flip`a`b`c!(100+til 10;10?50;10?100))
q)k:0 1
q).[`tab;(k;`b);:;0 1]