【发布时间】:2010-11-07 13:13:36
【问题描述】:
我正在寻找一种类似于 STL 集(T)的排序数据结构。 我找到了 SortedList,但它需要 (key, val),我正在寻找类似 List(string) 的东西 - 仅排序。
我在网上找到了 Spring.Collections,但我的框架无法识别它。
我可以在常规的基本框架中使用一个简单的 SortedSet 吗?
谢谢, 加尔
【问题讨论】:
-
列表不是集合。是否允许重复?
我正在寻找一种类似于 STL 集(T)的排序数据结构。 我找到了 SortedList,但它需要 (key, val),我正在寻找类似 List(string) 的东西 - 仅排序。
我在网上找到了 Spring.Collections,但我的框架无法识别它。
我可以在常规的基本框架中使用一个简单的 SortedSet 吗?
谢谢, 加尔
【问题讨论】:
您可以使用 System.Collections.Generic.Dictionary 来做到这一点。这是一篇好文章:Dictionarys and sorting
编辑: SortedDictionary 似乎是better。
【讨论】:
.NET 4.0中引入的SortedSet
【讨论】:
还可以对List<T> 进行排序。默认情况下不排序,但您可以对其进行排序,即使您愿意,也可以使用自定义排序算法。
【讨论】:
除了SortedDictionary<K,V> 和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 时对列表进行排序
【讨论】: