在规格不佳的界面中,

int[] userIdList; // ids of all users to display
string[] userNameList; // names of all users to display


限制条件是userIdList [i]始终包含名称为userNameList [i]的用户的ID。

新的要求是按名称对用户进行排序:我将采用这两个列表,按名称进行排序,并返回两个列表,其中上述限制仍然成立。

当然,我可以自己实现排序功能,但是我认为单行linq语句可以做得更好?我起床了

userNameList.Zip(userIdList, (name, id) => new {name, id}).OrderBy(a=>a.name).


但现在我不知道如何重新解压缩列表...

最佳答案

对于输入:

 int[] userIdList = new []{ 1,5,3,6 }; // ids of all users to display
 string[] userNameList = new []{ "Farix", "Doubles", "Rogue", "Splinter" }; // names of all users to display


您可以这样做:

 Array.Sort(userNameList, userIdList);


然后,您将获得与LINQ代码完全相同的结果,但是具有一个更简单的表达式,该表达式不会像LINQ代码中那样分配新的数组,而只是对现有数组中的项进行重新排序,这效率更高。

09-18 13:53