gremlin - Gremlin:如何检查添加边缘是否会导致循环
问题描述
给定一个图表,例如:
g.addV().property(id,'a').as('a').
addV().property(id,'b').as('b').
addV().property(id,'c').as('c').
addE('knows').from('a').to('b').
addE('knows').from('b').to('c').iterate();
如何检测添加边缘会导致循环?例如,以下操作会引入一个循环:
g.addE('knows').from('c').to('a').iterate();
我想知道这个循环而不实际添加边缘(所以我可以防止循环)。
解决方案
想到的一个想法是检查从“a”到“c”的路径是否已经存在,只有在不存在时才添加边。使用一个coalesce
步骤,它内部的第一个返回结果的遍历将被兑现。因此,如果V('c')
找到到的路径,则将返回该顶点。否则将创建并返回新边。希望即使您最终需要这种方法的变体,这也可以为您提供一些工作。
gremlin> g.V('a').
......1> coalesce(
......2> repeat(out()).until(hasId('c')),
......3> addE('knows').from(V('c')).to(V('a')))
==>v[c]
推荐阅读
- c++ - Windows.h Sleep(x) 中是否实现了流刷新?
- c - 在 Ubuntu 中使用 SDL(简单 DirectMedia 层)库
- javascript - 如何使用 JS 创建邮政编码检查器
- html - 如何在 HTML/CSS 中居中文本
- node.js - 运行笑话测试时无法附加调试器
- css - 尝试为文本转换和文本装饰设置动画。适用于除 Safari 之外的任何地方(bot 移动和桌面)
- matlab - 反馈() - 没有足够的论据
- javascript - 通过单击打开 div 并通过单击外部关闭
- javascript - 如何控制 $.ajax 上的“成功”?
- flutter - 类'String'没有实例方法'map'