【问题标题】:Lambda Expressions, Compare item1, if they are equal compare item2Lambda 表达式,比较 item1,如果它们相等,比较 item2
【发布时间】:2014-08-28 08:17:32
【问题描述】:

我试图搜索,但似乎找不到我的答案。我认为答案可能存在,因为它不是一个不常见的问题。我想说按 Item1 排序。如果相等,按Item2排序

sorted.Sort((a,b)=>(a.Item1.CompareTo(b.Item1)));

【问题讨论】:

标签: c# sorting


【解决方案1】:

虽然您可以使用List<T>.Sort 构建比较器来执行此操作,但使用专为此类事情构建的 LINQ 要容易得多:

sorted = unsorted.OrderBy(x => x.Item1).ThenBy(x => x.Item2).ToList();

如果你真的想使用 Sort,你可以在我的 MiscUtil 项目中使用 ProjectionEqualityComparer - 但它不如 LINQ 方法好。

【讨论】:

    【解决方案2】:
    var sorted = original.OrderBy(c => c.Item1).ThenBy(n => n.Item2).ToList()
    

    试试这个

    【讨论】:

    • 你没有使用结果,所以它不会做任何有用的事情。
    • 提交太快了。固定
    • 请注意,这不会是List<T>,这可能是 OP 所期望的。
    【解决方案3】:

    作为 LINQ 方法的替代方法,您可以创建一个比较器:

    class FrobComparer : IComparer<Frob>
    {
        public int Compare(Frob x, Frob y)
        {
            int item1Comparison = x.Item1.CompareTo(y.Item1);
    
            if (item1Comparison == 0)
                return x.Item2.CompareTo(y.Item2);
            return item1Comparison;
        }
    }
    

    然后将其传递给Sort(),假设unsortedList&lt;Frob&gt;

    var sorted = unsorted.Sort(new FrobComparer());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多