Lambda 表达式,比较 item1,如果它们相等,比较 item2

Posted

技术标签:

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

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

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

【问题讨论】:

Multiple Order By with LINQ 的可能重复项 【参考方案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());

【讨论】:

以上是关于Lambda 表达式,比较 item1,如果它们相等,比较 item2的主要内容,如果未能解决你的问题,请参考以下文章

Lambda表达式用法大比较: Scala和Java 8

在通用列表的 ForEach() 中的 lambda 表达式中使用条件运算符?

函数编程——匿名函数与lambda

匿名函数

Lambda表达式

Lambda 表达式以及如何组合它们?