grails - 如何排序列表中的随机分层数据

标签 grails hierarchy

实际上,我正在处理数据分析类型的项目,其中我在处理层次结构数据。

我在层次结构数据列表中有一个列表,如下所示

dataList = [[Id:1, Manager id:0, String:s], [Id:4, Manager id:0, String:p], [Id:7, Manager id:0, String:s],[Id:8, Manager id:1, String:s], [Id:2, Manager id:1, String:s],
[Id:3, Manager id:2, String:s],[Id:9, Manager id:8, String:s],[Id:5, Manager id:4, String:s]]

Id is id and Manager id is parent id //Manager id with 0 dont have any parent



因此,是否可以根据层次结构订购数据列表。在我使用 dojoTreeTable dojo 之前,但是在处理10k记录时会花费大量时间,因为需要根据层次结构添加额外的变量来进行排序。

enter image description here

请不要多看我已经做过的事情。但是,此扩展了我现在正在实现的所有

最佳答案

首先按“管理员ID”对它们进行排序,然后按“Id”对它们进行排序。然后将它们简化为从“经理ID”到子列表的映射:

def p = "P"
def s = "S"
def dataList = [[Id:1, 'Manager id':0, String:s], [Id:4, 'Manager id':0, String:p], [Id:7, 'Manager id':0, String:s],[Id:8, 'Manager id':1, String:s], [Id:2, 'Manager id':1, String:s], [Id:3, 'Manager id':2, String:s],[Id:9, 'Manager id':8, String:s],[Id:5, 'Manager id':4, String:s]]

def sortByManagerIdAndId = { a,b ->
    a."Manager id" <=> b."Manager id" ?: a.Id <=> b.Id
}

def hier = dataList.sort(sortByManagerIdAndId).inject([:].withDefault{[]}) { m,e ->
    m[e."Manager id"] << e; m
}

assert hier.keySet() == dataList*."Manager id".toSet()
assert hier[0]*.Id == [1,4,7]
assert hier[4]*.Id == [5]

从那里构建您的UI模型(或直接在reduce步骤中这样做)

关于grails - 如何排序列表中的随机分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085310/

相关文章:

hibernate - 可能隐式地将所有嵌套的域对象重新附加到Grails中的Hibernate session 中?

Javascript - 遍历数组的分层对象

java - 将部门层次结构打印到表中

php - 表示分层任务/子任务的最佳方式 (MySQL/PHP)

grails - 与各种Grails应用程序共享Spring Security Core

eclipse - 用于GantBuilder的Grails 1.4.0.M1(带有STS 2.7.0.M2)NoClassDefFoundError

grails - grails Acegi:如何检查过期的密码

java - chalice : getting exception while using Jackson API

mysql - 如何查询 MySql 表以显示根及其子项。

c++ - 当它们在父类(super class)中被定义为纯虚拟时,如何从子类中调用所有函数?