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

2q5ifsrm  于 2023-01-14  发布在  .NET
关注(0)|答案(5)|浏览(131)

如果我只想要一个日期、整数或双精度的排序列表,那么真的有必要定义一个SortedList(of Integer,Integer)吗?
这对我来说很有趣,但可能只是琐碎的。我更喜欢只使用一个SortedList(整型)。
(This问题与.Net泛型集合有关)

mpbci0fu

mpbci0fu1#

下一个版本的.NET(4.0)将有SortedSet类,它完全可以满足你的需求,在此之前,封装SortedList是最接近的--除非你想实现一个自己的类来完成这一任务,或者使用外部集合库(例如,C5有一个SortedArray和一个TreeSet类)。

e0bqpujr

e0bqpujr2#

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

x6492ojm

x6492ojm3#

是的,这是必要的,因为这就是API的设计。:-)
但是使用SortedList<K,V>来创建自己的SortedList<T>并不难。

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不能处理复制品。

q3qa4bjr

q3qa4bjr4#

排序列表按键排序,而不是按值排序。From MSDN
SortedList对象的元素按键排序,排序方式可以是根据创建SortedList时指定的特定IComparer实现,也可以是根据键本身提供的IComparable实现。无论是哪种情况,SortedList都不允许重复键。
因此,它基本上是一个支持排序的字典类。另一方面,List按值排序

rsl1atfo

rsl1atfo5#

我想HashSet<int>可能适合你的需要。

相关问题