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()
,假设unsorted
是List<Frob>
:
var sorted = unsorted.Sort(new FrobComparer());
【讨论】:
以上是关于Lambda 表达式,比较 item1,如果它们相等,比较 item2的主要内容,如果未能解决你的问题,请参考以下文章