2013-07-05 132 views
1

我想按特定顺序对对象列表进行排序。使用它的参数对对象列表进行排序

Dim myList as new List(Of myObj) 

myObj有2个参数Name(串)和ParentName(串)

假设myList具有项的n个号码,他们是按以下顺序:

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

是的,这是正确的,只要父节点在孩子之上就可以,孩子们的节点不一定要在下面 – 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; 
    } 
} 

(当然,你需要确保有没有孩子是自己的爷爷奶奶为此才能正常工作。)

相关问题