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

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

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

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

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

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

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

【问题讨论】:

  • ObjectList是什么类型的?
  • 试试ObjectList.ToList().Sort();
  • 你可以试试List.Sort
  • @user2720372:但它是自定义对象的列表。如何指定ObjectList.ToList().Sort();中的哪个字段?

标签: c# lambda


【解决方案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 方法(因为可以对列表进行排序)。但是,其他集合,例如哈希集根本不允许排序,因此如果您希望对集合进行排序,则必须创建一个新集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多