【问题标题】:Sorting a List with OrderBy使用 OrderBy 对列表进行排序
【发布时间】:2013-11-04 05:06:45
【问题描述】:

为什么下面的代码不能对我的列表进行排序?

List<string> lst = new List<string>() { "bac", "abc", "cab" };
lst.OrderBy(p => p.Substring(0));

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    因为 OrderBy 返回 IOrderedEnumerable 你应该这样做:

    lst = lst.OrderBy(p => p.Substring(0)).ToList();
    

    您还可以执行以下操作:

    lst.Sort();
    

    【讨论】:

    • 请注意,List&lt;T&gt;.Sort 是一种不稳定的排序,而 OrderBy 是稳定的。当然,在这种情况下,排序是按首字母排序,而使用不带任何参数的list.Sort 将按整个字符串排序。
    • Jon, .Substring(0) 返回整个字符串,我相信...对于第一个字符,需要 .Substring(0,1)[0]...
    • 如何以特定的搜索键字母顺序对列表进行排序?我已经尝试过但无法正常工作的代码:lst = lst.OrderByDescending(p =&gt; p.Substring(0)[0] == searchValue[0]).ToList();
    【解决方案2】:

    您将 LINQ 操作与更改其应用的变量的方法(即对象的实例方法)混淆了。

    LINQ 操作(即 .OrderBy)返回一个查询。它对您的对象(即lst)执行操作。

    您需要将该查询的 result 分配回您的变量:

    lst = lst.OrderBy(p => p).ToList();
    

    在 LINQ 术语中。

    【讨论】:

      【解决方案3】:
      string[] words = { "bac", "abc", "cab" };
      
      var sortedWords = from w in words
                        orderby w
                        select w;
      
      Console.WriteLine("The sorted list of words:");
      
      foreach (var w in sortedWords)
      {
          Console.WriteLine(w);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多