【问题标题】:Sort collection by order of an array按数组的顺序对集合进行排序
【发布时间】:2011-09-20 02:39:58
【问题描述】:

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

EmployeeID: 1
Name: Name1

EmployeeID: 2
Name: Name2

EmployeeID: 3
Name: Name3

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

如何获取员工集合,并按 EmployeeID 数组对它们进行排序?

【问题讨论】:

    标签: c# asp.net linq


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我认为这个用户问了同样的问题 - 您可以在 linq 查询中加入基于 EmployeeId 的两组。

      Custom sorting with LINQ

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:
          var employees = ...
          var employeesByID = employees.ToDictionary(employee => employee.ID);
          
          var sortedIDs = new int[] {2, 1, 3};
          var sortedEmployees = sortedIDs.Select(ID => employeesByID[ID]);
          

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

          【讨论】:

            猜你喜欢
            • 2011-03-30
            • 1970-01-01
            • 2017-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-26
            • 1970-01-01
            相关资源
            最近更新 更多