根据另一个列表,对包含对象列表的列表进行排序的最快方法是什么?一个例子如下:
说我有多个员工名单。每个单独的列表都有一个共同的属性值,比如说“部门”。所以我有一份员工列表,在一个列表中,他们都有部门字符串值“Sales”。在另一个列表中,所有对象的部门值都为“Finance”。然后,这些员工列表将包含在一个列表中,这些列表将所有员工都包含在内。
我有第二个列表,它应该驱动员工列表的排序顺序。第二个列表只包含一个字符串列表,如“财务”,“销售”,“IT”等。我希望我的客户列表按“财务”,“销售”等顺序排序。
我在.NET 2.0中使用VB.NET
干杯!
答案 0 :(得分:1)
这不是最有效的方法,但这是一种方法:
List<List<Employee>> employeeLists = ...
List<string> departments = ...
// implicitly List<List<Employee>>
var sortedEmpLists = employeeLists
.OrderBy(eList => departments.IndexOf(eList.First().Department))
.ToList();
基本上,我们的想法是宣布员工订单的子列表取决于其第一个成员部门的顺序。当然,这取决于以下假设,我认为在您的场景中也是如此:
departments
列表中。如果您想要就地排序:
employeeLists.Sort((eList1, eList2) =>
departments.IndexOf(eList1.First().Department)
.CompareTo(departments.IndexOf(eList2.First().Department)));
编辑:这是一个.NET 2.0版本(C#):
Comparison<List<Employee>> comp =
delegate(List<Employee> eList1, List<Employee> eList2)
{
string d1 = departments.IndexOf(eList1[0].Department);
string d2 = departments.IndexOf(eList2[0].Department);
return d1.CompareTo(d2);
};
employeeLists.Sort(comp);
当然,您也可以随时写一个IComparer<List<Employee>>
。