如果我Comparer<T>
为了对一组对象进行排序而创建一个,是否有一种简单的方法可以“反转”它,以便我可以在另一个方向进行排序?或者我是否需要Comparer<T>
在比较方法中交换测试来定义第二个?
问问题
508 次
3 回答
5
public class ReverseComparer<T> : Comparer<T>
{
private Comparer<T> inputComparer;
public ReverseComparer(Comparer<T> inputComparer)
{
this.inputComparer = inputComparer;
}
public override int Compare(T x, T y)
{
return inputComparer.Compare(y, x);
}
}
这使您可以执行以下操作:
list.Sort(new ReverseComparer(someOtherComparer));
于 2012-05-10T17:59:33.363 回答
4
这不是有效的代码,但您可以Reverse
在 sort 后使用Comparer<T>
:
var ordered = theList.Sort(new FooComparer()).Reverse();
由于您标记了您的问题,因此.Net4
您可以使用LINQ
OrderBy
and ThenBy
,因此您甚至不需要Comparer<T>
...
var ordered = theList.OrderBy(x => x.First).ThenBy(x => x.Second);
var reverseOrdered = theList.OrderByDescending(x => x.First)
.ThenByDescending(x => x.Second);
于 2012-05-10T17:51:57.283 回答
1
您可以使用相同的Comparer<T>
,只是当您需要反转结果时,您可以简单地使用myList<T>.Reverse()
方法。
于 2012-05-10T17:51:01.213 回答