我有以下字典:
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
,但这似乎并不像我想象的那样容易。
答案 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中x
和y
的顺序。
答案 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));