【问题标题】:SortedList vs. KeyedCollectionSortedList 与 KeyedCollection
【发布时间】:2013-05-20 12:34:45
【问题描述】:

我最近一直在使用 SortedList(key,value),但我想知道它与 KeyedCollection(key, value) 有何不同,除了明显的排序部分。

例如,如果我正在构建一个需要通过键检索项目的能力并且它们的排序并不那么重要的类,那么以下哪一个是更好的选择?:

  1. SortedList 作为类的属性:

    public class MyClass<TKey,TItem>
    {
        private SortedList<TKey, TItem> myList;
    }
    

  2. 扩展 KeyedCollection

    public class MyClass<TKey,TItem> : KeyedCollection<TKey,TItem>{}
    

谢谢。

【问题讨论】:

  • 两者都没有,您想使用Dictionary
  • 就像@Servy 提到的那样,您可能应该使用字典。如果排序是必须的,还有一个 SortedDictionary 可以使用。
  • @TyCobb OP 明确表示他不需要需要排序数据。
  • @Servy 他说“没那么重要”,意思是有时他确实希望对其进行排序。我的评论纯粹是一个选项存在的仅供参考。
  • KeyedCollection 是dangerous

标签: c# sortedlist keyedcollection


【解决方案1】:

KeyedCollection 是一个抽象类 - 您必须创建派生自 KeyedCollection 的类型(“MyKeyedDictionary”),并且您必须指定它将如何从 TValue 中提取 TKey(覆盖 TKey GetKeyForItem(TValue) 方法)

因此,当您将值添加到 MyKeyedDictionary 时,您只需指定 TValue(您的类将在后台提取 TKey。

KeyedCollection 的另一个不同之处在于它将数据存储在 HashTable 和 List 中的场景中,但 SortedList 仅将数据存储在 List 中(实际上是两个列表 - 一个存储键,另一个存储值。它是当然通过密钥存储)

所以 SortedList 不是关于排序值,而是关于 FAST 查找。主要问题是任何修改都很慢。但是有一个很好的替代方案,它也将具有良好的修改速度 - 并且该替代方案是 SortedDictionary。它还提供快速查找,同时也具有良好的修改性能。

附: SortedDictionary 将键存储在平衡树中,我不确定与存储在排序列表中的 SortedList 键的查找速度相比如何。但从我所读到的 - 两者都提供快速查找。

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2016-07-08
    • 2011-07-21
    • 2018-02-08
    • 1970-01-01
    • 2010-10-30
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多