2016-02-02 38 views
2

我應該使用什麼容器來容納MyEnum類型的值的列表,但容器必須確保MyEnum的值只能最多隻能一次出現在整個容器,並且容器中的每個元素只包含1個值?如果我使用鍵值對容器,則爲該值部分分配的內存將被浪費。鍵值對容器沒有價值

概括:基本上,容器是一樣的在C#中列出,但不同的是隻有一個值放心從未在容器中出現兩次?

+0

如果你只想在數據存儲中使用不同的值,那麼使用HashSet? HashSet是一個優化的集合集合。它有助於消除數組中重複的字符串或元素。它提供了一個簡單的語法來獲取集合中元素的聯合。這是在它的構造函數中執行的。 –

+0

非常感謝你。我試着用Google搜索「密鑰容器」,所有出來的結果都是關於存儲客戶端服務器的私鑰的。 HashSet是我需要的。 –

+0

不要求upvotes。也許他們只會給你帶來低價。 –

回答

0

您可以使用的東西,被稱爲HashSet。 Rembember,它的實現IEqualityComparer爲您希望在HashSet使用對象的好習慣。

4

我相當肯定,你要尋找的HashSet<T>類:

HashSet<MyEnum> = new HashSet<MyEnum>(); 
// add them here 

這個系列是非常有效的查找,並確保所有的項目都是獨一無二的。您可以嘗試添加已經在該組中的物品,然後Add返回false

由於枚舉是你可以直接使用它的值類型。如果你想使用自定義類,你必須確保它覆蓋Equals + GetHashCode。另一種選擇是將自定義IEqualityComparer<T>傳遞到this constructor

1

此節目包含一個包含若干重複的串的源陣列。它消除了數組中的重複字符串。該程序調用HashSet構造函數將數組元素轉換爲一組數據結構。

class Program 
{ 
    static void Main() 
    { 
    // Input array that contains three duplicate strings. 
    string[] array1 = { "cat", "dog", "cat", "leopard", "tiger", "cat" }; 

    // Display the array. 
    Console.WriteLine(string.Join(",", array1)); 

    // Use HashSet constructor to ensure unique strings. 
    var hash = new HashSet<string>(array1); 

    // Convert to array of strings again. 
    string[] array2 = hash.ToArray(); 

    // Display the resulting array. 
    Console.WriteLine(string.Join(",", array2)); 
    } 
} 
+3

您不需要'ToArray'作爲'string.Join'將採用'IEnumerable ',其中'HashSet '是。 (從.Net 4開始) – juharr

+0

如果只有我有權與像您這樣的開發人員一起工作。 –