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

时间:2014-07-07 18:41:22

标签: c# sorting

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

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

3 个答案:

答案 0 :(得分:2)

虽然可以构建一个比较器来与List<T>.Sort一起使用,但使用LINQ会更容易,而LINQ是为这类事情而构建的:

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

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

答案 1 :(得分:1)

var sorted = original.OrderBy(c => c.Item1).ThenBy(n => n.Item2).ToList()

试试这个

答案 2 :(得分:0)

作为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<Frob>

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