为什么排序列表必须具有键值对?

时间:2010-03-15 12:06:33

标签: .net generics collections

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

似乎对我很有吸引力,但可能只是琐事。我更喜欢使用SortedList(Integer)。

(这个问题与.Net泛型集合有关)

5 个答案:

答案 0 :(得分:8)

下一版本的.NET(4.0)将拥有完全符合您要求的SortedSet类。在此之前,封装SortedList最接近 - 除非您想要实现自己的类来执行此操作,或者使用外部集合库(例如C5具有SortedArrayTreeSet } class)。

答案 1 :(得分:3)

您可以使用常规List<T>并在其上调用Sort

答案 2 :(得分:1)

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

但要使用SortedList<T>创建自己的SortedList<K,V>并不难。 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无法处理重复。

答案 3 :(得分:0)

排序列表对键进行排序,而不对值进行排序。来自MSDN

  

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

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

答案 4 :(得分:-1)

我认为HashSet<int>可能符合您的需求。