我有一个图表,其中带有某些标签的边形成一个具有已定义的起点和叶顶点的树。
我想执行广度优先搜索,并将树的每个级别的顶点作为单独的列表发出,以便进一步处理。
到目前为止,我可以使用下面的查询以正确的顺序获取顶点:
g.V()
.hasLabel("root")
.repeat(out("tree_edge").barrier().dedup())
.emit()
.until(outE("tree_edge").count().is(0))
然而,这导致一个列表:
==>v[64]
==>v[72]
==>v[80]
==>v[88]
==>v[208]
==>v[176]
==>v[216]
==>v[184]
==>v[192]
==>v[136]
==>v[152]
==>v[104]
==>v[120]
==>v[128]
==>v[144]
==>v[96]
我想要的更像是:
==>[v[64], v[72], v[80], v[88]]
==>[v[208], v[176], v[216], v[184], v[192]]
==>[v[136], v[152], v[104], v[120], v[128], v[144], v[96]]
我不确定我需要添加到重复步骤,以便它发出列表而不是单个顶点。我玩cap
,project
和fold
无济于事。
任何指针都会受到赞赏。
答案 0 :(得分:2)
根据树中的深度对顶点进行分组,然后对最终的组映射进行排序并返回所有值:
g.V().hasLabel("root").
group("m").
by(constant(-1)).
repeat(out("tree_edge").dedup().group("m").by(loops())).
until(__.not(outE("tree_edge"))).
cap("m").
order(local).
by(keys).
select(values).unfold()