如何在灰线中按边值对折点进行排序 [英] How sort vertices by edge values in Gremlin

查看:12
本文介绍了如何在灰线中按边值对折点进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出air-routes图,假设我想获得所有可能的一次中途停留路线,如下所示:

[home] --distance--> [stopover] --distance--> [destination]

其中[Home]、[stopover]和[Destination]是机场节点,每个节点都有一个表示机场代码的属性‘code’;距离是赋予连接两个机场节点的每条边的整数权重。

我如何编写一个查询来获取[Home]、[stopover]和[Destination]的机场代码,从而使结果按如下方式排序:

  1. [家庭]机场代码按字母顺序排序。
  2. 对于每组[家庭]机场,[中途停留]机场代码按[家庭]和[中途停留](升序)之间的距离排序。
  3. 排序1和2后,[目的地]机场编码按[中途停留]到[目的地]的距离排序。

(注:如果[家]和[目的地]是同一个机场并不重要)

推荐答案

您可以通过group和嵌套by调制来完成此操作。

g.V().
  group().
    by('code').
    by(
      outE('route').
      order().by('dist').
      inV().
      group().
        by('code').
        by(
          outE('route').
          order().by('dist').
          inV().
          values('code').fold())).
  unfold()

结果如下:

1.  {'SHH': {'WAA': ['KTS', 'SHH', 'OME'], 'OME': ['TLA', 'WMO', 'KTS', 'GLV', 'ELI', 'TNC', 'WAA', 'WBB', 'SHH', 'SKK', 'KKA', 'UNK', 'SVA', 'OTZ', 'GAM', 'ANC']}}
2.  {'KWN': {'BET': ['WNA', 'KWT', 'ATT', 'KUK', 'TLT', 'EEK', 'WTL', 'KKH', 'KWN', 'KLG', 'MLL', 'KWK', 'PQS', 'CYF', 'KPN', 'NME', 'OOK', 'GNU', 'VAK', 'SCM', 'HPB', 'EMK', 'ANC'], 'EEK': ['KWN', 'BET'], 'TOG': ['KWN']}}

3.  {'NUI': {'SCC': ['NUI', 'BTI', 'BRW', 'FAI', 'ANC'], 'BRW': ['ATK', 'AIN', 'NUI', 'PIZ', 'SCC', 'FAI', 'ANC']}}

4.  {'PSG': {'JNU': ['HNH', 'GST', 'HNS', 'SGY', 'SIT', 'KAE', 'PSG', 'YAK', 'KTN', 'ANC', 'SEA'], 'WRG': ['PSG', 'KTN']}}

5.  {'PIP': {'UGB': ['PTH']}}
.
.
.

这篇关于如何在灰线中按边值对折点进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆