加入词典制作 table
Joining dictionaries to make a table
当我用相同的键加入字典时,我得到一个 table :
q)((`s`p!`s1`p1);(`s`p!`s2`p2))
s p
-----
s1 p1
s2 p2
但如果键不同,它只是 returns 列表,有没有办法生成正确的 table?
q)((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
`s`p!`s1`p1
`s`p`m!`s2`p2`m2
您可以使用 uj
和副词 over
来获得 table:
q)(uj)over enlist each ((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
s p m
--------
s1 p1
s2 p2 m2
请注意,我们在加入之前先将个人词典制作成table。
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
另一种选择是使用 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
所以最有效的当然是你知道所有可能的键。但是如果你只想使用字典列表中的所有键,那么使用 #
仍然要快一些
当我用相同的键加入字典时,我得到一个 table :
q)((`s`p!`s1`p1);(`s`p!`s2`p2))
s p
-----
s1 p1
s2 p2
但如果键不同,它只是 returns 列表,有没有办法生成正确的 table?
q)((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
`s`p!`s1`p1
`s`p`m!`s2`p2`m2
您可以使用 uj
和副词 over
来获得 table:
q)(uj)over enlist each ((`s`p!`s1`p1);(`s`p`m!`s2`p2`m2))
s p m
--------
s1 p1
s2 p2 m2
请注意,我们在加入之前先将个人词典制作成table。
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
另一种选择是使用 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
所以最有效的当然是你知道所有可能的键。但是如果你只想使用字典列表中的所有键,那么使用 #
仍然要快一些