【问题标题】:SortedDictionary in reverse order of keys [duplicate]SortedDictionary 以相反的键顺序排列[重复]
【发布时间】:2012-10-30 16:04:30
【问题描述】:

我有以下字典:

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

【问题讨论】:

  • 使用反向比较器创建一个新的SortedDictionary
  • 你能给我一个例子吗?听起来这就是我要找的东西。
  • 很遗憾,字典上没有“排序”方法。我已经找过了。 ...另外,如果可能的话,我不想编写额外的代码或类。这似乎应该使用 LINQ 轻松完成。
  • 1) 您不需要Sort 方法。您只需要与其他问题相同的比较器方法 2)没有 LINQ 不会帮助您。您需要一个自定义比较器。 LINQ 会给你一个IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; 而不是SortedDictionary&lt;TKey, TValue&gt;

标签: c# linq reverse sorteddictionary


【解决方案1】:

如果您使用的是最新版本的框架,.NET 4.5 (Visual Studio 2012),您可以使用Comparer&lt;&gt;.Create 轻松完成。是这样的:

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

注意 lambda 中 xy 的顺序。

【讨论】:

    【解决方案2】:

    你可以给SortedDictionary一个IComparer&lt;TKey&gt;建设。你只需要提供一个颠倒顺序的东西。例如:

    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));
    

    【讨论】:

    • 感谢您的回复。使用它,我如何将原始字典放入新创建的字典中?
    • @AdamLevitt:尚不清楚您要做什么。这将是而不是原始代码。只需将值添加到此字典中即可。你真的需要字典的原始顺序吗?
    • @AdamLevitt 你没有。 SortedDictionaryComparer属性是只读的,构造后不能更改。
    • @Jon Skeet - 感谢您的帮助。因此,我创建了如上所示的字典。一旦我在那里有了条目,我只想做相反的事情,我再也不需要原件了。将值放入此字典后,是否需要再次调用才能实际执行相反的操作?
    • @AdamLevitt:之后为什么要反转它?我的回答中代码的重点是您创建字典,以便条目将始终自动按降序排列,无需进一步操作。
    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多