1

我正在尝试按特定顺序对对象列表进行排序。

Dim myList as new List(Of myObj)

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

假设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"  

请帮忙。

4

1 回答 1

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;
    }
}

(当然,您需要确保没有孩子是他们自己的祖父母才能正常工作。)

于 2013-07-05T05:57:03.500 回答