如何使排序列表反向排序?我是否必须自定义IComparer?

时间:2011-06-01 09:29:25

标签: c# sortedlist

在sortedlist队列中,queue.value [0]给出min键的对应值。如果我想让它给出最大键值?

我是否必须重写icomparer?

4 个答案:

答案 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());