首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过多个值执行GroupCount

通过多个值执行GroupCount
EN

Stack Overflow用户
提问于 2016-09-27 05:11:58
回答 3查看 813关注 0票数 1

我的数据结构是这样的:

代码语言:javascript
复制
{
    number: Integer
    letter: String
}

我想按这两个属性进行组计数,如下所示:

代码语言:javascript
复制
g.V().values('number', 'letter').groupCount();

并按如下方式查看数据:

代码语言:javascript
复制
[[1,A]:16, [1,B]:64, [2,A]:78, [2,B]:987]

有没有办法在tinkerpop中做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-27 19:00:09

一个简单的

代码语言:javascript
复制
g.V().groupCount().by(values('number', 'letter').fold())

应该能行得通。

票数 6
EN

Stack Overflow用户

发布于 2018-09-19 08:46:26

如果您还希望对相关顶点的属性执行groupCount (),则可以使用一个项目(values()不处理遍历,只处理对象上的简单属性)。

假设您的字母是相邻顶点的属性(在本例中使用传出边(但也可以使用in (),而number是当前/起始顶点的属性:

代码语言:javascript
复制
g.V().project('number', 'letter').
  by(values('number')).
  by(out('<outgoing-edge-label>').values('letter')).
  groupCount()

在许多情况下,它是强大的,它可以是by语句中的任意遍历和/或属性。

票数 1
EN

Stack Overflow用户

发布于 2016-09-27 06:38:19

我希望尽可能避免使用lambdas;但这就是使用lambda实现的方法(如果没有lambda就不可能做到这一点)。

代码语言:javascript
复制
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();

它的速度与

代码语言:javascript
复制
g.V().values('number', 'letter').groupCount();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39712466

复制
相关文章

相似问题

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