多个列表排序
本文关键字:排序 列表 | 更新日期: 2023-09-27 18:13:57
我有两个列表
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.
second list
> List<EmpID> employeeSortOrder = GetEmpSortOrder();
>
> ie. employeeSortOrder will have
>
> Id/ranking
>
1 500
2 200
3 300
4 700
使用第二个列表employeeSortOrder,是否有办法对第一个列表employeeDetails进行排序,并根据employeeSortOrder返回输出?Id:
Mark Pearl大道500号
约翰哈明顿路200号
谢谢。
所以您希望employeeDetails
按照employeeSortOrder
给出的顺序排序。
最简单的方法是从employeeSortOrder
数组创建Dictionary<EmpId, int>
。然后创建一个自定义排序方法,在该字典中查找内容。
// 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]);
});
其工作方式是,对于排序进行的每次比较,它调用Lambda函数。Lambda函数在字典中查找员工id并返回其排名。
try this:
employeeDetails.Sort((c1, c2) => employeeSortOrder.FindIndex(e=>e.ranking==c1.empID).CompareTo(employeeSortOrder.FindIndex(e=>e.ranking==c2.empID)));
试试这样做(使用LINQ):
employeeDetails.OrderBy(e => employeeSortOrder.First(s => s.Id == e.EmpId).Ranking);
这里假设employeeSortOrder
中的EmpID.Id
对应employeeDetails
中的ClassEmpInfo.EmpId
。
一定要导入System。Linq命名空间。
MSDN for OrderBy
: http://msdn.microsoft.com/en-us/library/bb534966.aspx
MSDN for First
: http://msdn.microsoft.com/en-us/library/bb535050.aspx