没有值的键值对容器

时间:2016-02-02 13:34:37

标签: c#

我应该使用什么容器来包含MyEnum类型的值列表,但是容器必须确保MyEnum的值只能在整个容器中最多只出现一次,并且容器中的每个元素只包含1值?如果我使用键值对容器,则为值部分分配的内存将被浪费。

总结:基本上,哪个容器与C#中的List相同,但区别仅在于确保一个值永远不会在容器中出现两次?

3 个答案:

答案 0 :(得分:4)

我相当确定您正在寻找HashSet<T>课程:

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

此集合在查找方面非常有效,并确保所有项目都是唯一的。您可以尝试添加已在集合中的项目,然后Add返回false

由于枚举是一种值类型,因此您可以直接使用它。如果您想使用自定义类,则必须确保它覆盖Equals + GetHashCode。另一种方法是将自定义IEqualityComparer<T>传递给this constructor

答案 1 :(得分: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));
     }
}

答案 2 :(得分:0)

您可以使用名为HashSet的内容。请记住,对于要在HashSet中使用的对象实施IEqualityComparer,这是一种很好的做法。