多个值的 GroupCount
GroupCount by Multiple Values
我的数据结构如下:
{
number: Integer
letter: String
}
我想像这样按两个属性进行分组计数:
g.V().values('number', 'letter').groupCount();
并查看显示的数据:
[[1,A]:16, [1,B]:64, [2,A]:78, [2,B]:987]
在 tinkerpop 中有什么方法可以做到这一点吗?
我宁愿尽可能避免使用 lambda;但这是用 lambda 可以做到的(如果事实证明没有 lambda 是不可能做到的)。
Map<String, Map<Integer, Integer> map = new HashMap<>();
g.V().sideEffect(it -> {
String letter = (String) it.get().property("letter").value());
Integer number = (Integer) it.get().property("number").value());
if (map.get(letter) == null)
map.put(letter, new HashMap<>());
if (map.get(letter).get(number) == null)
map.get(letter).put(number, 1);
else
map.get(letter).put(number, map.get(letter).get(number) + 1);
}).iterate();
与
的速度大致相同
g.V().values('number', 'letter').groupCount();
简单
g.V().groupCount().by(values('number', 'letter').fold())
应该可以解决问题。
如果你想对相关顶点的属性进行 groupCount 以及 project() 将完成这项工作(values() 不处理对象上的简单属性的遍历)。
假设您的字母是相邻顶点的 属性(在这种情况下使用传出边(但也可能是传入的,使用 in())并且数字是 属性你的 current/starting 顶点:
g.V().project('number', 'letter').
by(values('number')).
by(out('<outgoing-edge-label>').values('letter')).
groupCount()
很多时候很强大,可以任意遍历by语句中的and/or属性
我的数据结构如下:
{
number: Integer
letter: String
}
我想像这样按两个属性进行分组计数:
g.V().values('number', 'letter').groupCount();
并查看显示的数据:
[[1,A]:16, [1,B]:64, [2,A]:78, [2,B]:987]
在 tinkerpop 中有什么方法可以做到这一点吗?
我宁愿尽可能避免使用 lambda;但这是用 lambda 可以做到的(如果事实证明没有 lambda 是不可能做到的)。
Map<String, Map<Integer, Integer> map = new HashMap<>();
g.V().sideEffect(it -> {
String letter = (String) it.get().property("letter").value());
Integer number = (Integer) it.get().property("number").value());
if (map.get(letter) == null)
map.put(letter, new HashMap<>());
if (map.get(letter).get(number) == null)
map.get(letter).put(number, 1);
else
map.get(letter).put(number, map.get(letter).get(number) + 1);
}).iterate();
与
的速度大致相同g.V().values('number', 'letter').groupCount();
简单
g.V().groupCount().by(values('number', 'letter').fold())
应该可以解决问题。
如果你想对相关顶点的属性进行 groupCount 以及 project() 将完成这项工作(values() 不处理对象上的简单属性的遍历)。
假设您的字母是相邻顶点的 属性(在这种情况下使用传出边(但也可能是传入的,使用 in())并且数字是 属性你的 current/starting 顶点:
g.V().project('number', 'letter').
by(values('number')).
by(out('<outgoing-edge-label>').values('letter')).
groupCount()
很多时候很强大,可以任意遍历by语句中的and/or属性