深入学习Gremlin(19):结果存取口袋sack

本文深入探讨了Gremlin中的结果存取口袋sack,它允许在图遍历过程中存储中间结果,便于后续步骤使用。介绍了如何创建口袋、存取数据以及分裂和合并操作。通过多个实例,展示了sack在图数据库查询中的应用,如计算路径权重之和和根据权重排序路径。
摘要由CSDN通过智能技术生成

第19期 Gremlin Steps:

sack()

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据,如下图所示:

init-data

上一期:深入学习Gremlin(18):随机过滤与注入

结果存取口袋说明

Gremlin在路径遍历的时候,可以将中间结果存放到一个叫口袋(sack)的结构里面,以备在后续步骤中使用;此外在放入数据到口袋的时候,还可以做一些灵活的操作比如:分裂(split)、合并(merge)等。sack相关step属于Gremlin语言里面的高级操作,在处理较为复杂的任务时可以灵活的实现一些特殊功能。

下面讲解实现上述功能的具体Step:

  • withSack(): 创建一个口袋,并给定一个初始结构,比如可以是一个返回Map或者随机数的lambda函数,也可以是一个对象或常数;另外还可以提供lambda分裂函数,以指定当traverser分裂时的行为,比如进行clone操作。
  • sack(): 将数据放入口袋,或者从口袋取出数据。当传入lambda合并函数作为参数时,可指定放入口袋的行为如何执行;当不传入参数时表示读取口袋中的内容。
实例讲解

下面通过实例来深入理解每一个操作。

  1. Step withSack()…sack(): 利用口袋来存取结果

    示例1:

    // 创建一个包含常数1的口袋,
    // 并且在最终取出口袋中的值
    g.withSack(1).V().sack()
    

    g.withSack(1).V().sack()

    示例2:

    // 创建一个包含常数1的口袋,
    // 并且在最终取出口袋中的值
    g.withSack{
         new Random().nextFloat()}
     .V().sack()
    

    g.withSack{random}.V().sack()

    试一试:将g.withSack{}的大括号换为小括号g.withSack()看看有什么区别

    示例3:

    // 通过sum求和的方式把数据放入口袋
    g.withSack(0).V()
     .
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值