Groovy древовидный сорт - PullRequest
       5

Groovy древовидный сорт

0 голосов
/ 04 января 2012

У меня проблема с сортировкой строк из БД, имеющих древовидную иерархию. Каждая строка содержит три столбца, значимых для этой проблемы: id, parent, lp. Id - String, parent - другая строка, а lp - число, используемое для сортировки строк, не имеющих отношения родитель-потомок. В каждой строке может быть любое количество детей и только один родитель (ноль на верхнем уровне)

Я вижу три ситуации:

  • когда первая строка является родительской для другой: -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                                  
   }

Буду признателен за любые предложения. Спасибо заранее!

1 Ответ

0 голосов
/ 04 января 2012

Ваше сравнение должно быть последовательным независимо от порядка аргументов. Если аргументы a = it1 и b = it2, результатом должно быть отрицание b = it1 и a = it2. Не похоже, что это так. Например, случай, когда it1.parent == it2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...