【问题标题】:Why does sorted list have to have a key value pair?为什么排序列表必须有一个键值对?
【发布时间】:2011-01-27 15:53:18
【问题描述】:

如果我只想要一个仅包含日期、整数或双精度数的排序列表,是否真的有必要定义一个 SortedList(of Integer, Integer)?

对我来说似乎很有趣,但可能只是琐碎。我宁愿只使用 SortedList(of Integer)。

(这个问题与 .Net 通用集合有关)

【问题讨论】:

标签: .net generics collections


【解决方案1】:

是的,这是必要的,因为这就是 API 的设计方式。 :-)

但是创建自己的使用SortedList<K,V>SortedList<T> 并不难。 5行代码?

class SortedList<T> : IEnumerable<T> {
    SortedList<T,int> _list = new SortedList<T,int>();
    public IEnumerator<T> GetEnumerator() { return _list.Keys.GetEnumerator(); }
    IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator();  }
    public void Add(T v) { _list.Add(v, 1); }
    public int Count { get { return _list.Count; } }
}

唯一的问题是,SortedList 无法处理重复数据。

【讨论】:

【解决方案2】:

.NET 的下一个版本 (4.0) 将包含 SortedSet 类,可以完全满足您的需求。在那之前,封装SortedList 是最接近的——除非您想实现自己的类来执行此操作,或者使用外部集合库(例如C5,它具有SortedArrayTreeSet 类)。

【讨论】:

  • SortedSet 不会像集合论所要求的那样添加与集合中已有元素相等的元素。 SortedList 应该能够处理相同值的多个实例并正确排序。
【解决方案3】:

排序列表根据键而不是值进行排序。来自MSDN

SortedList 对象的元素 按键排序 根据特定的 IComparer 实施时指定 SortedList 是创建或根据 IComparable 实现 由密钥本身提供。在 无论哪种情况,SortedList 都不会 允许重复键。

所以它基本上是一个支持排序的字典类。另一方面,List 按值排序

【讨论】:

    【解决方案4】:

    我认为HashSet&lt;int&gt; 可能适合您的需求。

    【讨论】:

      【解决方案5】:

      您可以使用普通的List&lt;T&gt; 并在其上调用Sort

      【讨论】:

      • 如果频繁排序,这对于大型列表可能效率低下;此外,您必须记住每次更改时对其进行排序。
      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多