取消字典分组

时间:2019-03-17 18:13:47

标签: 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
0N 0 1 0 2

有没有更有效的解决方案,如何在给定p的情况下获得c

2 个答案:

答案 0 :(得分:2)

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

invgroup:{key[x]@[raze x;value x;:;til count x]}

有效地执行此操作,将组字典的值作为单个列表返回(斜线x),在每个关联索引集(值x)处对该列表进行索引,并从原始列表中为其分配正确的索引。 然后我们使用这些索引来索引原始列表(键x)的不同值以拉出原始列表

p ~ invgroup group p:0N 0 1 0 2
1b

答案 1 :(得分:1)

Simple solution is:

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