我應該使用什麼容器來容納MyEnum類型的值的列表,但容器必須確保MyEnum的值只能最多隻能一次出現在整個容器,並且容器中的每個元素只包含1個值?如果我使用鍵值對容器,則爲該值部分分配的內存將被浪費。鍵值對容器沒有價值
概括:基本上,容器是一樣的在C#中列出,但不同的是隻有一個值放心從未在容器中出現兩次?
我應該使用什麼容器來容納MyEnum類型的值的列表,但容器必須確保MyEnum的值只能最多隻能一次出現在整個容器,並且容器中的每個元素只包含1個值?如果我使用鍵值對容器,則爲該值部分分配的內存將被浪費。鍵值對容器沒有價值
概括:基本上,容器是一樣的在C#中列出,但不同的是隻有一個值放心從未在容器中出現兩次?
您可以使用的東西,被稱爲HashSet。 Rembember,它的實現IEqualityComparer爲您希望在HashSet
使用對象的好習慣。
我相當肯定,你要尋找的HashSet<T>
類:
HashSet<MyEnum> = new HashSet<MyEnum>();
// add them here
這個系列是非常有效的查找,並確保所有的項目都是獨一無二的。您可以嘗試添加已經在該組中的物品,然後Add
返回false
。
由於枚舉是你可以直接使用它的值類型。如果你想使用自定義類,你必須確保它覆蓋Equals
+ GetHashCode
。另一種選擇是將自定義IEqualityComparer<T>
傳遞到this constructor。
此節目包含一個包含若干重複的串的源陣列。它消除了數組中的重複字符串。該程序調用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));
}
}
您不需要'ToArray'作爲'string.Join'將採用'IEnumerable
如果只有我有權與像您這樣的開發人員一起工作。 –
如果你只想在數據存儲中使用不同的值,那麼使用HashSet? HashSet是一個優化的集合集合。它有助於消除數組中重複的字符串或元素。它提供了一個簡單的語法來獲取集合中元素的聯合。這是在它的構造函數中執行的。 –
非常感謝你。我試着用Google搜索「密鑰容器」,所有出來的結果都是關於存儲客戶端服務器的私鑰的。 HashSet是我需要的。 –
不要求upvotes。也許他們只會給你帶來低價。 –