要将元素向上插入字典,我会
q) d[`x]:12345
Run Code Online (Sandbox Code Playgroud)
这将修改现有的字典,并且操作成本接近O(1)
或O(log N)
取决于基础实现(哈希表或树)(我不知道)。
但是,要删除密钥,我必须使用:
q) d:(enlist `x) _ d
Run Code Online (Sandbox Code Playgroud)
这至少O(N)
是因为它复制了完整的词典而不删除其中的项目,O(N)
然后由于指针而将其分配给d
了O(1)
。
这看起来像删除操作歧视!也许就地删除没有很好的文档记录,但是存在于某个地方?
还有两个选项适用:
.[`d;();_;`x]
Run Code Online (Sandbox Code Playgroud)
![`d;();0b;enlist`x]
Run Code Online (Sandbox Code Playgroud)
如果要一次性删除多个键,则最后一种形式很有用。例如,
![`d;();0b;`x`y]
Run Code Online (Sandbox Code Playgroud)
四种形式支持就地删除。
跌落通过分配允许你删除一个单个密钥 “到位”。
q)show d:`a`b`c`x!(1;2 3;4;5)
a| 1
b| 2 3
c| 4
x| 5
q)d _: `x
q)d
a| 1
b| 2 3
c| 4
Run Code Online (Sandbox Code Playgroud)
Apply将允许您参数化密钥:
q)show d:`a`b`c`x!(1;2 3;4;5)
a| 1
b| 2 3
c| 4
x| 5
q).[`d;();_;`x]
q)d
a| 1
b| 2 3
c| 4
Run Code Online (Sandbox Code Playgroud)
delete
像所有Q-SQL模板一样,通过引用调用也支持“就地”,并且还允许您放下多个键:
q)show d:`a`b`c`x!(1;2 3;4;5)
a| 1
b| 2 3
c| 4
x| 5
q)delete x,b from `d
`d
q)d
a| 1
c| 4
Run Code Online (Sandbox Code Playgroud)
功能删除支持多个键,并允许您参数化键。(parse
用于查看Q-SQL模板的功能形式。)
q)show d:`a`b`c`x!(1;2 3;4;5)
a| 1
b| 2 3
c| 4
x| 5
q)parse "delete x,b from d"
!
`d
()
0b
,`x`b
q)![`d;();0b;`x`b]
`d
q)d
a| 1
c| 4
Run Code Online (Sandbox Code Playgroud)
上面的链接是kdb +文档站点code.kx.com。
归档时间: |
|
查看次数: |
601 次 |
最近记录: |