2009-07-02 55 views
3

我正在尋找一個有序的數據結構,它與STL集(T)類似。 我發現SortedList,但它需要(鍵,val),我正在尋找類似List(字符串)的東西 - 只有排序。用於C++ STL集的C#替代方案<T>

我在網上找到Spring.Collections,但我的框架無法識別它。

是否有一個簡單的SortedSet我可以在常規的基本框架中使用?

感謝, 加

+1

列表不是一套。你想允許重複嗎? – tobsen 2010-12-13 20:49:09

+0

[在.NET中是否有排序的集合類型?](http://stackoverflow.com/questions/196512/is-there-a-sorted-collection-type-in​​-net) – nawfal 2014-06-02 18:28:30

回答

7

你可以用System.Collections.Generic.Dictionary做到這一點。這裏有一篇好文章:Dictionarys and sorting

編輯: SortedDictionary似乎甚至better

+0

謝謝。但這正是我想要避免的:有。我正在尋找一個只有值的排序數據結構,如列表,但我想沒有,所以我會用你的解決方案。 :-) – 2009-07-02 06:52:28

1

另外List<T>可以排序。它不是默認排序的,但是如果您願意的話,您可以對它進行排序,即使使用自定義排序算法。

-1

如何使用列表<>並調用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。

將使用擴展方法來更改列表<> .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); 

,並將值成爲:

newList [ 0] == 3 newList [1] == 4 newList [3] == 6

您也可以只使用則newList.Add和列表進行排序,當你調用newList.AddSort

0

有是一個System.Collections.SortedList或System.Collections.Generic.SortedList它總是排序。 或者你可以使用Array.Sort方法來按時間排序定義的時刻。

5

的SortedSet,< T>介紹在.NET 4.0中是你在找什麼,請參閱MSDN here