5

我有以下字典:

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了,但这似乎并不像我想象的那么容易。

4

2 回答 2

19

如果您使用的是最新版本的框架 .NET 4.5 (Visual Studio 2012),您可以使用Comparer<>.Create. 就像这样:

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

注意lambda中x和的顺序。y

于 2012-11-10T17:26:10.063 回答
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));
于 2012-11-10T15:21:13.980 回答