Groovy树状排序

时间:2012-01-04 14:22:13

标签: sorting groovy tree

我在从具有树状层次结构的db中排序行时遇到问题。每行包含三个对此问题有意义的列:id,parent,lp。 Id是String,parent是另一行,lp是用于对没有父子关系的行进行排序的数字。每行可以有任意数量的子节点,只有一个父节点(顶层为null)

我看到有三种情况:

  • 当第一行是另一行的父级时:返回-1
  • 当第一行是lp低于另一行的父项的子项时:: 返回-1
  • 当这些关系都不存在时(当行具有相同的父级且处于同一级别时):比较lps的行

我已经编写了这个代码,我认为应该解决这个问题,但它不适用于层次结构深层的行,它会使命令混乱:

  dane = dane.sort {it1, it2 -> 
        it1 == it2.parent ? -1 :                                
           it1.parent && it1.parent.lp < it2.lp ? -1 :
               it1.lp - it2.key.lp                                  
   }

我很感激任何建议。 Thx提前!

1 个答案:

答案 0 :(得分:0)

无论参数的顺序如何,您的比较都应该是一致的。如果参数为a = it1b = it2,则结果应为b = it1a = it2的否定。这看起来并不像这样。例如,it1.parent == it2

的情况