我正试图将IComprarer用于一种复杂的类型。我有一个复杂的类型(为了简单起见,有三个ints):
ID | A | B
1 | 1 | 10
2 | 3 | 20
3 | 1 | 30
4 | 3 | 5
5 | 2 | 15我需要按B分类,但我需要保持A在一起。B可以是ASC或DESC,但我不能将'A‘分开
它必须这样做:
ID | A | B
3 | 1 | 30
1 | 1 | 10
2 | 3 | 20
4 | 3 | 5
5 | 2 | 15A顺序没有什么特别之处,重要的是:B是有序的,同样的A不能分开。
我试过:
public int Compare(Comanda x, Comanda y)
{
if (x.A == y.A) return 0;
return x.B.CompareTo(y.B);
}但不起作用,我甚至不知道如何问谷歌,“组”关键词帮不了多少忙。
并且尝试两次排序,显然不起作用(丢弃了B顺序)。
list.Sort(new SortByB());
list.Sort(new SortByA());我该怎么做呢?谢谢
这不是"C# List<> Sort by x然后y“的复制,因为我不想做双排序。我想要分组
发布于 2016-10-19 13:22:38
对于具体的例子,我将执行以下操作。
var sorted = list.GroupBy(x => x.A)
.OrderByDescending(g => g.Max(x => x.B))
.SelectMany(g => g.OrderByDescending(x => x.B));基本上,您需要先在A上分组,然后在B的最大值上对组进行排序,然后在B上对每个组中的项进行排序。
另一种选择是先对B进行排序,然后在A上进行分组,然后根据组中第一项中B的值对组进行排序(因为我们已经对它们进行了订购,因此组中的B应该是最大值),然后就可以将结果扁平化。
var sorted = list.OrderByDescending(x => x.B)
.GroupBy(x => x.A)
.OrderByDescending(g => g.First().B)
.SelectMany(g => g);发布于 2016-10-19 13:15:06
您可以使用orderby,我猜:
var sorted = list.orderby(comanda=>commanda.B).thenby(comanda=>commanda.A);https://stackoverflow.com/questions/40132383
复制相似问题