我正在寻找一种类似于 STL set(T) 的排序数据结构。我找到了 SortedList,但它需要 (key, val),我正在寻找类似 List(string) 的东西 - 只排序。
我在网上找到了 Spring.Collections,但我的框架无法识别它。
我可以在常规基本框架中使用一个简单的 SortedSet 吗?
谢谢,盖尔
.NET 4.0 中引入的 SortedSet < T > 就是您要找的,请参阅此处的 MSDN
也List<T>
可以排序。默认情况下它不会排序,但您可以对其进行排序,即使您愿意,也可以使用自定义排序算法。
SortedDictionary<K,V>
除了and之外,框架中没有内置任何内容SortedList<K,V>
。
C5 Collections库有几个排序的集合。根据您的确切要求,以下其中一项应该可以解决问题:SortedArray<T>
,TreeBag<T>
或TreeSet<T>
.
还有Power Collections,它提供OrderedBag<T>
和OrderedSet<T>
集合。
有一个 System.Collections.SortedList 或 System.Collections.Generic.SortedList 总是排序的。或者您可以使用 Array.Sort 方法对定义的时刻进行排序。
使用 List<> 并调用 Sort 方法怎么样?
不是扩展,但试试这个
public class SortedList<T>: List<T>
{
public SortedList(): base()
{
}
public SortedList(IEnumerable<T> collection): base(collection)
{
}
public SortedList(int capacity)
: base(capacity)
{
}
public void AddSort(T item)
{
base.Add(item);
this.Sort();
}
}
这只是一个起点,但添加了一个新方法 AddSort。
扩展方法将用于更改 List<>.Add 方法并在其末尾调用排序。
使用扩展方法
将以下内容放在您的代码可访问的命名空间中:
public static class ListExtension
{
public static void AddSort<T>(this List<T> list, T item)
{
list.Add(item);
list.Sort();
}
}
您可以使用以下代码:
List<int> newList = List<int>();
newList.AddSort(6);
newList.AddSort(4);
newList.AddSort(3);
值将是:
新列表[0] == 3 新列表[1] == 4 新列表[3] == 6
您也可以只使用 newList.Add,然后在调用 newList.AddSort 时对列表进行排序