【发布时间】:2014-08-28 08:17:32
【问题描述】:
我试图搜索,但似乎找不到我的答案。我认为答案可能存在,因为它不是一个不常见的问题。我想说按 Item1 排序。如果相等,按Item2排序
sorted.Sort((a,b)=>(a.Item1.CompareTo(b.Item1)));
【问题讨论】:
-
Multiple Order By with LINQ 的可能重复项
我试图搜索,但似乎找不到我的答案。我认为答案可能存在,因为它不是一个不常见的问题。我想说按 Item1 排序。如果相等,按Item2排序
sorted.Sort((a,b)=>(a.Item1.CompareTo(b.Item1)));
【问题讨论】:
虽然您可以使用List<T>.Sort 构建比较器来执行此操作,但使用专为此类事情构建的 LINQ 要容易得多:
sorted = unsorted.OrderBy(x => x.Item1).ThenBy(x => x.Item2).ToList();
如果你真的想使用 Sort,你可以在我的 MiscUtil 项目中使用 ProjectionEqualityComparer - 但它不如 LINQ 方法好。
【讨论】:
var sorted = original.OrderBy(c => c.Item1).ThenBy(n => n.Item2).ToList()
试试这个
【讨论】:
List<T>,这可能是 OP 所期望的。
作为 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(),假设unsorted 是List<Frob>:
var sorted = unsorted.Sort(new FrobComparer());
【讨论】: