如何使用 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表达式对列表进行升序降序排列