【问题标题】:Sorting a List in C# using List.Sort(Comparison<T> comparison使用 List.Sort(Comparison<T> 比较在 C# 中对列表进行排序
【发布时间】:2014-01-21 00:57:53
【问题描述】:

我创建了一个类如下:

public class StringMatch
{
   public int line_num;
   public int num_of_words;
}

我已经创建了一个列表

List<StringMatch> sm;

里面的元素很少。

如何使用Comparison&lt;T&gt; 比较重载对该列表进行排序? 必须根据num_of_words 字段进行排序。

【问题讨论】:

    标签: c# .net list sorting


    【解决方案1】:

    您可以编写比较两个对象的 lambda 表达式,如下所示:

    sm.Sort((x,y)=>x.num_of_words.CompareTo(y.num_of_words));
    

    你可以逆向排序添加-

    sm.Sort((x,y)=>-x.num_of_words.CompareTo(y.num_of_words));
    

    【讨论】:

    • 您不需要 使用 lambda。任何代表都可以正常工作。
    【解决方案2】:

    您可以为此使用 Linq OrderBy 方法 -

    sm = sm.OrderBy(i => i.num_of_words).ToList();
    

    【讨论】:

    • 我想要稳定排序,但我发现 orderby 进行稳定排序。这很有用。谢谢!!
    • 这会创建一个新的列表对象。
    【解决方案3】:

    official microsoft documentation 上有一个使用示例。该示例使用字符串。替换为int 供您使用。

    private static int CompareDinosByLength(string x, string y)
    {
       ...
    }
    
    List<string> dinosaurs = new List<string>();
    dinosaurs.Add("Pachycephalosaurus");
    dinosaurs.Add("Amargasaurus");
    dinosaurs.Add("");
    dinosaurs.Add(null);
    dinosaurs.Add("Mamenchisaurus");
    dinosaurs.Add("Deinonychus");
    dinosaurs.Sort(CompareDinosByLength);
    

    一个小小的谷歌可以走很长的路。

    【讨论】:

      【解决方案4】:

      使用Comparison 是一种更古老且更笨重的集合排序方式。我的建议是使用Linq 中的OrderBy 方法:

      var orderedSm = sm.OrderBy(x => x.num_of_words).ToList();
      

      【讨论】:

      • 这会创建一个新的List 对象,不满足使用Sort 重载的问题要求。
      猜你喜欢
      • 2013-02-13
      • 2018-09-10
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多