SortedDictionary按键的逆序

Ada*_*itt 4 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");
Run Code Online (Sandbox Code Playgroud)

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

我尝试过,dictionary.Reverse但似乎并没有像我想象的那样容易.

Jep*_*sen 15

如果您正在使用最新版本的.NET 4.5(Visual Studio 2012),那么您可以非常轻松地使用它Comparer<>.Create.就像这样:

var dictionary =
  new SortedDictionary<int, string>(Comparer<int>.Create((x, y) => y.CompareTo(x)));
Run Code Online (Sandbox Code Playgroud)

注意lambda 中x和的顺序y.


Jon*_*eet 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

var dictionary = new SortedDictionary<int, string>(
       new ReverseComparer<int>(Comparer<int>.Default));
Run Code Online (Sandbox Code Playgroud)