Kdb 将字典解组

Kdb 将字典解组,kdb,Kdb,假设父向量p定义为列表,其中每个元素都是指向同一向量中给定项的父项的位置索引的指针。 然后,可以找到每个父项的子项,如下所示: q) c:group p:0N 0 1 0 2 | ,0 0| 1 3 1| ,2 2| ,4 如果给出了c,将子字典c展平到父向量p的有效方法是什么 显然,ungroup不能直接在字典上工作: q) ungroup c 'type 但我们可以取消表的分组: q) {@[;`k] `v xasc ungroup ([]k:key x;v:value x)} c 0

假设父向量
p
定义为列表,其中每个元素都是指向同一向量中给定项的父项的位置索引的指针。 然后,可以找到每个父项的子项,如下所示:

q) c:group p:0N 0 1 0 2
 | ,0
0| 1 3
1| ,2
2| ,4
如果给出了
c
,将子字典
c
展平到父向量
p
的有效方法是什么

显然,
ungroup
不能直接在字典上工作:

q) ungroup c
'type
但我们可以取消表的分组:

q) {@[;`k] `v xasc ungroup ([]k:key x;v:value x)} c
0N 0 1 0 2

如果给定
c
,是否有更有效的解决方案来获取
p

对于您要查找的解组类型,没有本机q命令。 一个可能有用的选项是以下功能:

invgroup:{key[x]@[raze x;value x;:;til count x]}
有效的做法是,将组字典的值作为单个列表返回(raze x),在每组相关索引(值x)处将索引放入该列表,并从原始列表中为这些索引分配正确的索引。 然后,我们使用这些索引索引原始列表(键x)的不同值以拉出原始列表

p ~ invgroup group p:0N 0 1 0 2
1b
简单的解决办法是:

 q) @[raze c;value c;:;key c] 
 q) 0N 0 1 0 2