SortedDictionary按键的逆序

时间:2012-11-10 15:18:00

标签: c# linq reverse sorteddictionary

我有以下字典:

SortedDictionary<int, string> dictionary = new SortedDictionary<int, string>();
dictionary.add(2007, "test1");
dictionary.add(2008, "test2");
dictionary.add(2009, "test3");
dictionary.add(2010, "test4");
dictionary.add(2011, "test5");
dictionary.add(2012, "test6");

我想颠倒元素的顺序,这样当我在屏幕上显示项目时,我可以从2012开始。如果可能,我想将反向字典重新分配给变量字典。

我尝试了dictionary.Reverse,但这似乎并不像我想象的那样容易。

2 个答案:

答案 0 :(得分:14)

如果您使用的是最新版本的.NET 4.5(Visual Studio 2012),则可以使用Comparer<>.Create轻松完成。就像这样:

var dictionary =
  new SortedDictionary<int, string>(Comparer<int>.Create((x, y) => y.CompareTo(x)));

请注意lambda中xy的顺序。

答案 1 :(得分:7)

您可以在构建时SortedDictionary IComparer<TKey>。您只需提供一个可以逆转订单的产品。例如:

public sealed class ReverseComparer<T> : IComparer<T>
{
    private readonly IComparer<T> original;

    public ReverseComparer(IComparer<T> original)
    {
        // TODO: Validation
        this.original = original;
    }

    public int Compare(T left, T right)
    {
        return original.Compare(right, left);
    }
}

然后:

var dictionary = new SortedDictionary<int, string>(
       new ReverseComparer<int>(Comparer<int>.Default));