按数组的顺序对集合进行排序

本文关键字:排序 集合 数组 顺序 | 更新日期: 2023-09-27 18:08:58

所以我有一个Employee对象的集合。我有一个包含以下数据的列表:

EmployeeID: 1
Name: Name1
EmployeeID: 2
Name: Name2
EmployeeID: 3
Name: Name3

我运行一些代码来获取这些雇员的排序顺序,并将EmployeeID放在一个数组中:[2,1,3]

如何获取我的Employees集合,并按EmployeeID数组对其进行排序?

按数组的顺序对集合进行排序

您将获取数组的元素,而不是按数组项排序。

 var employees = myArray.Select(item => myEmployeeCollection.First(x => x.EmployeeId == item).ToList();

employees将是按照数组顺序排列的雇员对象的列表。

我想这个用户问了同样的问题——你可以在linq查询中基于EmployeeId连接这两个集合。

使用LINQ 进行自定义排序

您可以使用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]);

字典保证即使您的集合中有许多员工,员工查找的性能也会很好。