我有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号。
感谢。
答案 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