2013-09-23 3 views
0

Предположим, что у меня есть узлы/края, как:дисплей верхние 2 отдельные узлы, использующие гремлина

A --> M 300 
A --> B 100 
A --> C 200 
B --> D 300 
B --> E 200 
B --> L 1300 

я передать исходный узел, как А, В, то, как отображать следующий вывод отсортированных по количеству и пределу по 2

A --> M 300 
A --> C 200 

B --> L 1300 
B --> D 300 

ответ

0

Я предполагаю, что вы знаете, как фильтровать вершины «A» и «B» и начать обход с:

gremlin> g = new TinkerGraph() 
==>tinkergraph[vertices:0 edges:0] 
... 
gremlin> g.v("A","B").outE.groupBy{it.outV.next()}{[it.amount,it.inV.next()]}.cap.next() 
==>v[A]=[[200, v[C]], [100, v[B]], [300, v[M]]] 
==>v[B]=[[300, v[D]], [1300, v[L]], [200, v[E]]] 

так выше вы получаете все элементы «A» и «B», сгруппированные с их «суммой» (не уверен, что это число представляет в вашем домене). После этого просто используйте «сокращение» для сортировки и всплытия первых двух элементов в списке:

gremlin> g.v("A","B").outE.groupBy{it.outV.next()}{[it.amount,it.inV.next()]}{it.sort{a,b->b[0]<=>a[0]}[0..<2]}.cap.next() 
==>v[A]=[[300, v[M]], [200, v[C]]] 
==>v[B]=[[1300, v[L]], [300, v[D]]] 
+0

Да, это работает. что если для v [A] существует 4 outV(), а для v [B] есть 2 outV(), и если я пройду [0 .. <4], то он выдает исключениеIndex = 4. – Abhi

+0

Я думаю, вы могли бы сделать 'it.sort {a, b-> b [0] <=> a [0]}. Take (2)' –

+0

да да, он работает. многие из них Стивен. :) – Abhi

 Смежные вопросы

  • Нет связанных вопросов^_^