当我用相同的键加入词典时,我得到一张表:
q)((`s`p!`s1`p1);(`s`p!`s2`p2))
s p
-----
s1 p1
s2 p2
但是如果键不同,它只返回列表,有没有办法生成一个合适的表?
q)((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
`s`p!`s1`p1
`s`p`m!`s2`p2`m2
答案 0 :(得分:5)
您可以使用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
请注意,我们在加入之前首先将单个字典制作成表格。
当有超过2个词典时,over
特别有用。
否则单独使用uj
可以解决问题。
q)(enlist `s`p!`s1`p1) uj (enlist `s`p`m!`s2`p2`m2)
s p m
--------
s1 p1
s2 p2 m2
答案 1 :(得分:4)
另一个选择是使用take #
使字典的键统一
q)`s`p`m#/:((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
s p m
--------
s1 p1
s2 p2 m2
如果需要,您可以使用(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
比较执行时间&内存使用的不同选项
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
因此,如果您知道所有可能的密钥,那么效率最高。但如果您只想使用字典列表中的所有键,那么使用#
仍然会更快一些