graph-theory - 如何知道在gremlin中从一个顶点遍历到另一个顶点时遇到的顶点数
解决方案
在询问有关 Gremlin 的问题时,一张图片可能会有所帮助,但更重要的是提供一个 Gremlin 脚本来创建一些示例数据 - 如下所示:
g.addV().property(id,1).as('1').
addV().property(id,2).as('2').
addV().property(id,3).as('3').
addV().property(id,4).as('4').
addV().property(id,5).as('5').
addE('link').from('1').to('3').
addE('link').from('2').to('3').
addE('link').from('2').to('4').
addE('link').from('3').to('5').
addE('link').from('4').to('5').iterate()
在回答您的问题时,我认为您只需要使用path()
step 来显示 Gremlin 遍历的位置:
gremlin> g.V().repeat(out()).emit().path()
==>[v[1],v[3]]
==>[v[1],v[3],v[5]]
==>[v[2],v[3]]
==>[v[2],v[4]]
==>[v[2],v[3],v[5]]
==>[v[2],v[4],v[5]]
==>[v[3],v[5]]
==>[v[4],v[5]]
如果您只对顶点 1/2 和 5 之间的路径感兴趣,那么您可以添加一些限制:
gremlin> g.V(1,2).repeat(out()).emit(hasId(5)).path()
==>[v[1],v[3],v[5]]
==>[v[2],v[3],v[5]]
==>[v[2],v[4],v[5]]
在此基础上,如果您想计算路径中间的顶点,那么您可以unfold()
将路径过滤掉您的开始/结束顶点和count()
:
gremlin> g.V(2).
......1> repeat(out()).
......2> emit(hasId(5)).
......3> path().
......4> unfold().
......5> not(hasId(2,5)).
......6> dedup().
......7> count()
==>2
希望这能给你一些启发。Gremlin 食谱中有很多很好的例子。
推荐阅读
- css - 如何使用媒体查询在引导程序 4 中阻止特定宽度的视差?
- google-apps-script - 是否有脚本可以找到包含星号的特定列中的每个单元格,然后在其上方插入一行?
- c++ - 如何正确使用管道将数据从子进程传输到父进程?
- r - 预测模型给出奇怪的 MAPE 值,有人可以告诉我这是否正确吗?
- android - 如何从 inputConnection 中检测和删除 unicode 序列表情符号?
- javascript - 变量不会递增并注册其新值
- python - 用 windows 运行 pypy
- c# - 在 Unity 中获取任何对撞机对象的方法的最有效方法是什么?
- python - 如何根据列表值匹配条件对字典键进行分组?
- ruby-on-rails - 在 Rails 中删除 turbolink 后如何修复控制器重定向