2008-10-02 28 views
9

對於需要保存唯一整數列表的類,您會推薦什麼?推薦用於獨特整數集合的.NET類?

我將要添加()整數到集合,並檢查是否存在載有()。

也很高興也讓他們在一個列表作爲顯示字符串,即。 「1,5,10,21」。

+1

對不起,我沒有指定。我可以使用最新的框架。 3.5但你的答案可能會幫助其他人無法使用最新的。 – 2008-10-02 18:21:21

回答

24

HashSet

HashSet<T>類提供高性能的設置操作。一個集合是一個不包含重複元素的集合,其元素沒有特定順序...

對象的容量是對象可以容納的元素的數量。當元素添加到對象時,對象的容量會自動增加。

HashSet<T>該類基於數學集的模型並提供與訪問Dictionary<TKey, TValue>Hashtable集合的鍵類似的高性能集合操作。簡而言之,HashSet<T>類可以被認爲是沒有值的Dictionary<TKey, TValue>集合。

一個HashSet<T>集合沒有排序,不能包含重複的元素......

+0

我看着arraylist,它肯定比arraylist好,所以我刪除了我以前的答案。 – EBGreen 2008-10-02 18:10:41

+1

HashSet將ToString的類型...不是一個列表。並且他顯示的列表是HashSet不支持的順序之一。 – MagicKat 2008-10-02 18:16:15

2

如果您不能使用.NET 3.5,那麼你就不能使用HashSet的。如果是這種情況,那麼基於Dictionary結構很容易推出自己的產品。

public class Set<T> { 
    private class Unit { ... no behavior } 
    private Dictionary<T, Unit> d; 

.... 
} 

單位旨在是一個只有一個值的類型。無論您將元素映射到,只需使用鍵即可知道您的設備中有什麼。您在問題中要求的操作很容易實現。

1

你可以從KeyedCollection繼承一個類。通過這種方式,您的密鑰本身可以是值,您可以覆蓋ToString,以便獲得所需的輸出。這可以給你你想要/需要的行爲。

注意,這個答案是對的框架將q

3

在我的測試中2.0的一部分,我發現有一個虛擬值字典比HashSet的,具有非常大的數據集處理時(快在我的情況下是100,000+)。我期望這是因爲詞典允許你設置一個初始容量,但我不知道。在你描述的情況下,如果我想要一個非常大的一組數字,那麼我可能會使用Dictionary,然後(或者當我添加到Dictionary中時,取決於意圖)使用字符串生成器迭代它,創建輸出字符串。