按数组顺序排序集合
问题描述:
所以我有一个Employee对象的集合。我有一个包含此数据的列表:按数组顺序排序集合
EmployeeID: 1
Name: Name1
EmployeeID: 2
Name: Name2
EmployeeID: 3
Name: Name3
我跑了一些代码来取回这些员工的排序顺序,我把EmployeeIDs一个数组:[2,1,3]
。
如何获得我的员工集合,并按员工数组排序?
答
您将为数组获取元素,而不是按数组项排序。
var employees = myArray.Select(item => myEmployeeCollection.First(x => x.EmployeeId == item).ToList();
employees
然后将按您的数组顺序列出员工对象列表。
答
您可以使用Array.IndexOf订购基于ID的索引集合。
试试这个:
var employees = new List<Employee>();
employees.Add(new Employee{ID = 3, Name="Name1"});
employees.Add(new Employee{ID = 1, Name="Name2"});
employees.Add(new Employee{ID = 2, Name="Name3"});
var orders = new long[]{2, 1, 3};
var orderedEmployees = employees.OrderBy(e => Array.IndexOf(orders, e.ID));
orderedEmployees.ToList().ForEach(e => Console.WriteLine(e.ID));
答
var employees = ...
var employeesByID = employees.ToDictionary(employee => employee.ID);
var sortedIDs = new int[] {2, 1, 3};
var sortedEmployees = sortedIDs.Select(ID => employeesByID[ID]);
词典保证了员工查询的性能会好,即使你在集合中有多少员工。