3

我正在寻找一种类似于 STL set(T) 的排序数据结构。我找到了 SortedList,但它需要 (key, val),我正在寻找类似 List(string) 的东西 - 只排序。

我在网上找到了 Spring.Collections,但我的框架无法识别它。

我可以在常规基本框架中使用一个简单的 SortedSet 吗?

谢谢,盖尔

4

6 回答 6

7

您可以使用 A System.Collections.Generic.Dictionary 来做到这一点。这是一篇好文章:字典和排序

编辑: SortedDictionary 似乎更好

于 2009-07-02T06:32:08.653 回答
6

.NET 4.0 中引入的 SortedSet < T > 就是您要找的,请参阅此处的 MSDN

于 2010-03-02T19:03:46.920 回答
1

List<T>可以排序。默认情况下它不会排序,但您可以对其进行排序,即使您愿意,也可以使用自定义排序算法。

于 2009-07-02T06:36:27.960 回答
1

SortedDictionary<K,V>除了and之外,框架中没有内置任何内容SortedList<K,V>

C5 Collections库有几个排序的集合。根据您的确切要求,以下其中一项应该可以解决问题:SortedArray<T>,TreeBag<T>TreeSet<T>.

还有Power Collections,它提供OrderedBag<T>OrderedSet<T>集合。

于 2009-07-02T09:41:04.283 回答
0

有一个 System.Collections.SortedList 或 System.Collections.Generic.SortedList 总是排序的。或者您可以使用 Array.Sort 方法对定义的时刻进行排序。

于 2009-07-02T09:30:21.607 回答
-1

使用 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 时对列表进行排序

于 2009-07-02T06:38:43.180 回答