首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TinkerPop3中收集可选分支?

如何在TinkerPop3中收集可选分支?
EN

Stack Overflow用户
提问于 2016-04-15 20:29:13
回答 2查看 300关注 0票数 3

我有一张图是这样的:

使用葛兰,我尝试从A遍历并收集这些元组:

(A, Some(A1)), (B, None), (C, Some(A2))

因此,本质上,我想重复地将α从边缘取出来,并可选择地将其分支到β,收集这些数据。我猜想,如果没有β边缘,我需要注入一个空的“步骤”,但我还没有弄清楚如何做到这一点。

我也有点困惑如何在遍历β之后倒带,因为jump已经神秘地被移除了(TP 3.1+)

到目前为止,我有这样的情况:

代码语言:javascript
复制
graph.V("A").untilWithTraverser(t => t.get.outE(α).notExists()
    ).repeat(_.out(α).as(foo).out(β).as(bar)).select((foo,bar)).toList

但是,如果“主干”上的任何节点缺少β out边缘,这不会回滚回主遍历,并且失败。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-19 15:58:31

这是我的gremlin-scala解决方案,基于Daniel的回答。

代码语言:javascript
复制
val unionTraversal = __[(String, Vertex)].union(
  __[Vertex].identity.map("blob" -> _),
  __.out(Beta).map("beta" -> _)
).traversal

def pathTuplesToScalaTuples(path: Path) =
  path.objects.asScala.map(_.asInstanceOf[java.util.ArrayList[(String, Vertex)]].asScala.toList).toList

val pathO = graph.V("A")
    .until(_.not(_.out(Alpha)))
    .repeat(_.out(Alpha))
    .path.by(unionTraversal.fold).headOption
val tuples = pathO.map(pathTuplesToScalaTuples)

不幸的是,这涉及到一些实际使发出的顶点有用的知识。

首先,当将匿名遍历传递到联合中时,步骤标签会被擦除,这样就不能用.as("blob")标记发出的集合--这就是用字符串标签用元组包装它们的解决方法。

其次,gremlin还没有Path的包装器(而且可能永远得不到它,因为路径可以有任意的结构),所以我们不得不进行丑陋的转换。

票数 1
EN

Stack Overflow用户

发布于 2016-04-16 20:39:10

我不能提供gremlin解决方案,但是您应该可以很容易地转换以下Groovy示例:

代码语言:javascript
复制
g.V("A").until(__.not(outE("alpha"))).
           repeat(out("alpha")).path().by(union(identity(), out("beta")).fold())

这将返回:

代码语言:javascript
复制
[[A, A1], [B], [C, A2]]

海事组织,这就足够了。但是,如果您需要一组一致的两个条目,您可以这样做:

代码语言:javascript
复制
g.V("A").until(__.not(outE("alpha"))).repeat(out("alpha")).
  path().by(union(identity(), coalesce(out("beta"), constant("N/A"))).fold())

然后...which将返回:

代码语言:javascript
复制
[[A, A1], [B, N/A], [C, A2]]

完整会话:

http://gremlinbin.com/bin/view/57133bdc8ee00

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36656279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档