如果为了排序一组对象而创建Comparer<T>
,是否有一种简单的方法可以“反转”它以便我可以向另一个方向排序?或者我是否需要在比较方法中交换测试来定义第二个Comparer<T>
?
答案 0 :(得分: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));
答案 1 :(得分:4)
这不是高效的代码,但您可以在使用Reverse
排序后使用Comparer<T>
:
var ordered = theList.Sort(new FooComparer()).Reverse();
由于您标记了问题.Net4
您可以使用LINQ
OrderBy
和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);
答案 2 :(得分:1)
您可以使用相同的Comparer<T>
,当您需要反转结果时,您只需使用myList<T>.Reverse()
方法即可。