在sortedlist队列中,queue.value [0]给出min键的对应值。如果我想让它给出最大键值?
我是否必须重写icomparer?
答案 0 :(得分:11)
是的,你必须重写比较器
字符串作为键的示例:(刚刚与x.CompareTo(y)
交换y.CompareTo(x)
)
private class InvertedComparer : IComparer<String>
{
public int Compare(string x, string y)
{
return y.CompareTo(x);
}
}
和电话:
SortedList<string, Object> list = new SortedList<string, Object>(new InvertedComparer());
答案 1 :(得分:1)
这是实现ReversibleSortedList
的文章的link。这允许更改排序方向。
如果您总是想要反向排序行为而无法按需更改它,我会尝试accepts an IComparer的构造函数。
答案 2 :(得分:1)
在一些简单的情况下使用Array.Reverse()
。
using System;
class Program
{
static void Main()
{
// Input array.
int[] array = { 1, 2, 3 };
// Print.
foreach (int value in array)
{
Console.WriteLine(value);
}
Console.WriteLine();
// Reverse.
Array.Reverse(array);
// Print.
foreach (int value in array)
{
Console.WriteLine(value);
}
Console.WriteLine();
// Reverse again.
Array.Reverse(array);
// Print.
foreach (int value in array)
{
Console.WriteLine(value);
}
}
}
*输出*
1
2
3
3
2
1
1
2
3
答案 3 :(得分:0)
您可以反转任何现有的IComparers。像这样:
public static IComparer<T> Invert<T>(this IComparer<T> comparer)
{
return Comparer<T>.Create((x, y) => comparer.Compare(y, x));
}
并使用常规比较器。例如
new SortedList<,>(myShinyComparer.Invert());