我正在使用Groovy开发一个项目,我想接受一系列员工,这样就不会有任何经理在数组中跟随他们的下属。原因是我需要将人员添加到数据库中,我宁愿不要两次通过。
所以,我基本上有:
<employees>
<employee>
<employeeid>12</employeeid>
<manager>3</manager>
</employee>
<employee>
<employeeid>1</employeeid>
<manager></manager>
</employee>
<employee>
<employeeid>3</employeeid>
<manager>1</manager>
</employee>
</employees>
所以,它应该这样排序:
employeeid = 1
employeeid = 3
employeeid = 12
第一个人应该为经理留空。
我正在考虑二叉树表示,但我预计它会非常不平衡,我不确定使用Groovy正确执行此操作的最佳方法。
有没有办法不使用嵌套循环?
答案 0 :(得分:3)
http://en.wikipedia.org/wiki/Topological_sorting
假设除了CEO之外的每个员工都只有一个经理,我会将所有员工记录插入到一个关联结构中,该结构将每个员工ID映射到他们的直接报告列表。现在我们在CEO上调用以下递归程序:
def recursiveinsert(e):
insert e into the database
for each direct report d of e:
recursiveinsert(d)