1 kdb
当我用相同的键加入词典时,我得到一张桌子:
q)((`s`p!`s1`p1);(`s`p!`s2`p2))
s p
-----
s1 p1
s2 p2
Run Code Online (Sandbox Code Playgroud)
但是如果键不同,它只返回列表,有没有办法生成一个合适的表?
q)((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
`s`p!`s1`p1
`s`p`m!`s2`p2`m2
Run Code Online (Sandbox Code Playgroud)
您可以uj与副词一起使用over来获取表格:
q)(uj)over enlist each ((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
s p m
--------
s1 p1
s2 p2 m2
Run Code Online (Sandbox Code Playgroud)
请注意,我们在加入之前首先将单个词典制成表格.
over当有超过2个词典时,它特别有用.否则uj单独使用可以做到这一点.
q)(enlist `s`p!`s1`p1) uj (enlist `s`p`m!`s2`p2`m2)
s p m
--------
s1 p1
s2 p2 m2
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用take #来使字典的键统一
q)`s`p`m#/:((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
s p m
--------
s1 p1
s2 p2 m2
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以使用类似的(union/) key each功能将所有词典的键组合成一个唯一键列表
q)((union/)key each d)#/:d:((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
s p m
--------
s1 p1
s2 p2 m2
Run Code Online (Sandbox Code Playgroud)
比较不同选项的执行时间和内存使用情况
q)\ts:1000 (uj)over enlist each ((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
53 2288
q)\ts:1000 `s`p`m#/:((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
13 1920
q)\ts:1000 ((union/)key each d)#/:d:((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
22 2880
Run Code Online (Sandbox Code Playgroud)
因此,如果您知道所有可能的密钥,那么效率最高.但是,#如果您只想使用字典列表中的所有键,那么使用起来还是要快得多
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |