【问题标题】:How can i Sort a List<Tuple<int, double>>我如何对 List<Tuple<int, double>> 进行排序
【发布时间】:2015-03-02 12:29:35
【问题描述】:

您好,感谢您阅读这篇文章。

我有一个这样创建的列表

List<Tuple<int, double>> Ratings = new List<Tuple<int, double>>();

假设列表的值如下

Index      int     double

[0]        1       4,5
[1]        4       1,0
[2]        3       5,0
[3]        2       2,5

如何对列表进行排序,以便最大的双精度值位于顶部?像这样

Index      int     double
[0]        3       5,0
[1]        1       4,5
[2]        2       2,5
[3]        4       1,0

【问题讨论】:

  • Ratings = Ratings.OrderByDescending(tuple =&gt; tuple.Item2).ToList()?
  • 如果可以接受创建新列表,您可以简单地使用.OrderByDescending(x=&gt;x.Item2).ToList()
  • 对于就地排序,您可以使用list.Sort((x,y)=&gt;Comparer&lt;double&gt;.Default.Compare(y.Item2,x.Item2));

标签: c# list sorting


【解决方案1】:

你可以简单地使用

Ratings = Ratings.OrderByDescending (t => t.Item2).ToList();

【讨论】:

    【解决方案2】:
    Ratings.OrderByDescending(t => t.Item2);
    

    【讨论】:

    • 你应该使用 OrderByDescending() 的返回值来处理
    【解决方案3】:

    您是否尝试过使用列表中的Sort 方法,intellisense 应该已经向您推荐了它,这很自然:

    Ratings.Sort((x, y) => y.Item2.CompareTo(x.Item2));
    // at this stage the Ratings list will be sorted as desired
    

    【讨论】:

      【解决方案4】:
      List<Tuple<int, double>> Ratings = new List<Tuple<int, double>>();
      
                          Ratings.Add(new Tuple<int, double>(1, 4.5));
                          Ratings.Add(new Tuple<int, double>(4, 1.0));
                          Ratings.Add(new Tuple<int, double>(3, 5.0));
                          Ratings.Add(new Tuple<int, double>(2, 2.5));
      
                          var list = Ratings.OrderByDescending(c => c.Item2).ToList();
      

      【讨论】:

        【解决方案5】:
        var comparer = Comparer<Tuple<int, double>>.Create((x, y) => -1 * x.Item2.CompareTo(y.Item2));
        Ratings.Sort(comparer);
        

        【讨论】:

        • 乘以-1 不是一个好主意,因为它不会改变int.MinValue 的符号。这是比较器的有效返回值,即使双比较器可能不返回该值。请交换 xy
        • List.Sort 有一个接受Comparison&lt;T&gt; 委托的重载,无需构造比较器。
        猜你喜欢
        • 2011-06-07
        • 2013-07-03
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        • 2020-03-08
        • 2021-07-06
        相关资源
        最近更新 更多