我正在尝试按特定顺序对对象列表进行排序。
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 :(得分: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;
}
}
(当然,你需要确保没有孩子是他们自己的祖父母才能正常工作。)