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

フレームワークの最新バージョンである.NET4.5(Visual Studio 2012)を使用している場合は、を使用して非常に簡単に実行できますComparer<>.Create。こんな感じです:

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

ラムダの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 に答える