2013-07-05 3 views
1

Я пытаюсь сортировать список объектов в определенном порядке.Сортировка списка объектов с его параметром

Dim myList as new List(Of myObj) 

myObj имеет 2 параметра Name (строка) и ParentName (строка)

Скажем myList имеет п количество элементов, и они находятся в следующем порядке:

myList(0): Name="MD" , ParentName = "" 
myList(1): Name="Operations Manager" , ParentName = "MD" 
myList(2): Name="Section Sub Manager" , ParentName = "Section Manager" 
myList(3): Name="Assistant Manager1" , ParentName = "Tactical Manager" 
myList(4): Name="Tactical Manager" , ParentName = "MD" 
myList(5): Name="Assistant Manager2" , ParentName = "Tactical Manager" 
myList(6): Name="Section Manager" , ParentName = "MD" 

я должен сортируйте приведенное выше, чтобы дочерние узлы появлялись ПОСЛЕ его родительского элемента, т.е.:

myList(0): Name="MD" , ParentName = "" 
myList(1): Name="Operations Manager" , ParentName = "MD" 
myList(2): Name="Section Manager" , ParentName = "MD" 
myList(3): Name="Section Sub Manager" , ParentName = "Section Manager" 
myList(4): Name="Tactical Manager" , ParentName = "MD" 
myList(5): Name="Assistant Manager1" , ParentName = "Tactical Manager" 
myList(6): Name="Assistant Manager2" , ParentName = "Tactical Manager" 

помогите пожалуйста.

+0

Просто чтобы убедиться, что я понимаю, в вашем отсортирован список внизу, элементы в индексах 3 и 4 могут быть заменены без нарушения условия, правильно? – Cameron

+0

yes thats right, если родительский узел выше детей, это нормально, дочерние узлы не должны быть под ним внизу – user1770609

ответ

0

Хорошо, это похоже на простой пользовательский сорт с твист, что ограничение порядка не образует полный порядок (только частичный). Это должно сделать трюк:

var sorted = myList.OrderBy(x => x, new CustomComparer()).ToList(); 

class CustomComparer : IComparer<myObj> 
{ 
    public int Compare(myObj a, myObj b) 
    { 
     return a.ParentName == b.Name ? 1 : a.Name == b.ParentName ? -1 : 0; 
    } 
} 

(Конечно, вы должны убедиться, что нет никаких детей, которые являются их собственные прародители для этого, чтобы работать должным образом.)