如何使用 lambda 表达式对相同的列表进行排序?

Posted

技术标签:

【中文标题】如何使用 lambda 表达式对相同的列表进行排序?【英文标题】:How to sort same list using lambda expression? 【发布时间】:2014-03-10 10:42:43 【问题描述】:

我正在尝试对ICollection<T> 的现有列表进行排序,但失败了。以下是我尝试过的。没有错误但也没有效果。

....
ObjectList.OrderBy(x=>x.Name);
....

我是否完全不使用上述方式对列表进行排序?我也试过了:

ObjectList = ObjectList.OrderBy(x=>x.Name);

但这更糟,因为它给了我一个错误,说我错过了一个演员。

是否可以对同一个列表进行排序而不是将其分配给另一个变量?

【问题讨论】:

Sorting a list using Lambda/Linq to objects的可能重复 ObjectList是什么类型的? 试试ObjectList.ToList().Sort(); 你可以试试List.Sort @user2720372:但它是自定义对象的列表。如何指定ObjectList.ToList().Sort();中的哪个字段? 【参考方案1】:

简短的回答是否定的,如果不将 ICollection 分配给另一个变量,就无法对其进行排序。 ICollection 接口没有公开任何方法来做到这一点。

但是,在您的示例中使用 OrderBy 进行排序按预期工作,但返回 IEnumerable 而不是 ICollection。

我会将它分配给另一个变量,如下所示:

var sortedList = ObjectList.OrderBy(x=>x.Name);

【讨论】:

他也可以使用ObjectList = ObjectList.Orderby(x => x.Name).ToList(),因为List<T> 实现了ICollection<T>,但这只是避免使用不同的变量,但仍会创建一个新集合并且不会就地排序。【参考方案2】:

您必须在 .ToList() 处添加,因为 OrderBy 返回一个 IEnumerable,因此您尝试如下:

ObjectList = ObjectList.OrderBy(x=>x.Name). ToList() ;

【讨论】:

我不敢相信这么简单。像魅力一样工作。很快就会接受作为答案【参考方案3】:

这样的泛型排序操作是不存在的,因为不清楚如何对泛型集合进行排序。如果您的收藏是List<T>,您可以在那里使用Sort 方法(因为可以对列表进行排序)。但是,其他集合,例如哈希集根本不允许排序,因此如果您希望对集合进行排序,则必须创建一个新集合。

【讨论】:

以上是关于如何使用 lambda 表达式对相同的列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

python对二维列表进行排序而不使用lambda

使用lambda表达式按字段排序

请教如何使用lambda分组后排序

Python面试必考重点之列表,元组和字典第十二关——如果列表元素是字典序列,如何利用lambda表达式对列表进行升序降序排列

如何在java 8中将字符串排序为带有lambdas的int

按时间排序 DateTime 列表