我应该使用什么容器来包含MyEnum类型的值列表,但是容器必须确保MyEnum的值只能在整个容器中最多只出现一次,并且容器中的每个元素只包含1值?如果我使用键值对容器,则为值部分分配的内存将被浪费。
总结:基本上,哪个容器与C#中的List相同,但区别仅在于确保一个值永远不会在容器中出现两次?
答案 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,这是一种很好的做法。