多个列表排序

时间:2011-11-09 00:00:17

标签: c#

我有2个列表

List<ClassEmpInfo> employeeDetails = GetEmployeeDetails();  //returns list of values

And ClassEmpInfo class has  following attributes.

empID,
empName,
empAddress etc.

代表:

200  John  Harmington Road.
500  Mark  Pearl Blvd.

第二个清单

> List<EmpID> employeeSortOrder = GetEmpSortOrder();
> 
> ie. employeeSortOrder will have
> 
> Id/ranking
> 
 1 500
 2 200 
 3 300
 4 700

使用第二个列表employeeSortOrder,有没有办法对第一个列表employeeDetails进行排序,并根据employeeSortOrder.Id返回输出:

  

500 Mark Pearl Blvd.
     约翰哈明顿路200号。

感谢。

3 个答案:

答案 0 :(得分:0)

因此,您希望按employeeDetails给出的顺序对employeeSortOrder进行排序。

最简单的方法是从Dictionary<EmpId, int>数组创建employeeSortOrder。然后创建一个自定义排序方法,在该字典中查找内容。

// build the dictionary
Dictionary<EmpId, int> sortDict = new Dictionary<EmpId, int>();
foreach (var x in employeeSortOrder)
{
    sortDict.Add(x.Id, x.Rank);
}

// Now sort, using the dictionary
employeeDetails.Sort((e1, e2) =>
    {
        return sortDict[e1.Id].CompareTo(sortDict[e2.Id]);
    });

有效的方式是对于sort进行的每次比较,它调用Lambda函数。 Lambda函数在字典中查找员工ID并获得其排名。

答案 1 :(得分:0)

试试这个:

    employeeDetails.Sort((c1, c2) => employeeSortOrder.FindIndex(e=>e.ranking==c1.empID).CompareTo(employeeSortOrder.FindIndex(e=>e.ranking==c2.empID)));

答案 2 :(得分:0)

尝试这样的事情(使用LINQ):

employeeDetails.OrderBy(e => employeeSortOrder.First(s => s.Id == e.EmpId).Ranking);

这假设EmpID.Id中的每个employeeSortOrder ClassEmpInfo.EmpId总是employeeDetails

确保导入System.Linq命名空间。

OrderBy的MSDN:http://msdn.microsoft.com/en-us/library/bb534966.aspx

First的MSDN:http://msdn.microsoft.com/en-us/library/bb535050.aspx