|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
Есть список записей запись вида Код: c# 1. 2. 3. 4. 5. 6. 7.
OrderNumber - это порядковый номер записи (создается по типу count+1) Вообщем получается что в листе храним некое дерево. Задача состоит в том, чтобы отсортировать записи в листе соответственно по типу дерева, опираясь на OrderNumber по возрастанию. То есть как бы: M1 M1-1 M1-1-1 M1-1-2 M1-2 M2 M2-1 и т.д Подскажите попроще механизм... обновлять надо часто, но объемы не супер-большие, думаю до 100 записей ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 13:10 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 13:59 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
tual OrderNumber - это порядковый номер записи (создается по типу count+1) ... M1 M1-1 M1-1-1 M1-1-2 M1-2 M2 M2-1 Думается мне, что для такой задачи в виде списка хранить дерево не очень эффективно. Но в принципе, храни у детей ссылку на родителя, по ней рекурсивно формируй М1-2-3 и сортируй. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:30 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
Да понятно что неэффективно. Выбора у меня нету к сожалению.. это датасоурс для кастомгрида, в котором надо как-то показать родительские отношения аля три вью. При том что лист этот надо каждый раз пересобирать когда как минимум в него добавляется запись Все мучаю сорт, не могу понять каким кодом обработать ситуацию, когда встречаются объект с ParentGUID и объект, который парент но для других объектов ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:45 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
Может тут сортом не стоит извращаться, а собрать в лист сначала объекты без парентов (по OrderNumber), потом инсертом их потомки (по OrderNumber),потом инсертом их потомки (по OrderNumber) ? Максимальная вложенность - корень-узел-узел ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:48 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
можно использовать hierarchyid http://www.codeproject.com/Articles/37038/Loading-a-TreeView-using-HierarchyID ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 15:06 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
tualЕсть список записей запись вида Код: c# 1. 2. 3. 4. 5. 6. 7.
OrderNumber - это порядковый номер записи (создается по типу count+1) Вообщем получается что в листе храним некое дерево. Задача состоит в том, чтобы отсортировать записи в листе соответственно по типу дерева, опираясь на OrderNumber по возрастанию. То есть как бы: M1 M1-1 M1-1-1 M1-1-2 M1-2 M2 M2-1 и т.д Подскажите попроще механизм... обновлять надо часто, но объемы не супер-большие, думаю до 100 записей не вникал, но если структуры менять можно то хранил бы ссылки на родителей при формировании списка, а потом ордербай по getcustomid который рекурсией создавал бы число по айдишникам. Если нельзя менять структурку и декорировать не хочется, то словарики, иначе потенциально может тормозить ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 15:43 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
Denis.не вникал, но если структуры менять можно то хранил бы ссылки на родителей при формировании списка, а потом ордербай по getcustomid который рекурсией создавал бы число по айдишникам. Если нельзя менять структурку и декорировать не хочется, то словарики, иначе потенциально может тормозить Честно говоря не сильно понял написанного. Я пока сделал в лоб, и мне это не нравится. 1) То есть создаем новый список 2) Линком берем корневые записи (ParentGUID == null), идем по ним форичем 3) форичем проходим по записям у которых ParentGUID равен корневой 4) то же самое (второй уровень вложенности) Рекурсий никаких нет, общая структура дерева (используемые бизнес-объекты) крайне врядли будет меняться ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 16:14 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
Или тут имелось ввиду создать доп проперти в классе под названием SortedIndex, по которой и делать OrderBy ? Проперти добавить можно, не проблема. А вот что за рекурсию тут применить я не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 16:23 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
tual, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:30 |
|
List<T> отсортировать а-ля дерево
|
|||
---|---|---|---|
#18+
ЕвгенийВtual, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
можно еще сделать Lookup и сразу получать перечисление по ключу, как вариант :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:29 |
|
|
start [/forum/topic.php?fid=20&fpage=83&tid=1401483]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 148ms |
0 / 0 |