通常我需要一个int / strings / etc列表。我创建了一个列表:
var list = new List<string>
然后我创建一个包含所有字符串的哈希表,除非它不在哈希表中,否则我不会插入列表中,即强制列表中的唯一项。
是否有可以满足这两个要求的数据类型?
答案 0 :(得分:6)
有。使用HashSet:
var set = new HashSet<int>();
set.Add(4);
set.Add(4); // there is already such an element in the set, no new elements added
但请记住,它不能保证元素的顺序。
答案 1 :(得分:1)
你的意思是HashSet<string>
吗?
HashSet<T>
中的所有元素都是唯一的; Add()
方法返回bool
以指示是否实际添加了新项目,或者是否为无操作项。
答案 2 :(得分:0)
是否有可以满足这两个要求的数据类型?
没有。哈希表将为您提供直接访问给定其唯一键的元素,而在列表中您不需要键,您肯定可以重复。
答案 3 :(得分:0)
您可以使用HashSet<T>
数据类型MSDN。这只允许您拥有每个值的单个副本。
答案 4 :(得分:0)
如果您仅使用一组唯一值(并且随后不关心订购),那么您应该查看HashSet<T>
答案 5 :(得分:0)
从技术上讲,有System.Collections.Specialized.OrderedDictionary。但是,这是一个旧非更新(非泛型)类,我通常建议避免它; - )
表示密钥或索引可访问的键/值对的集合。
在实践中,我将创建一个公开所需操作的最小包装类。 (我可能会使用HashSet<T>
(存在)和List<T>
(用于排序),但只有一个List<T>
对于相对较小的n
来说已经足够了大多数情况下 - 记住Big-O是关于限制的。)
快乐的编码。
答案 6 :(得分:0)
HashSet<string> set = new HashSet<string>();
bool inserted = set.Add("Item");
bool insertedDuplicate = set.Add("Item");
inserted.Dump("Result1");
insertedDuplicate.Dump("Result2");
//Result
//Result1 = true
//Result2 = false
您可以在LinqPad中运行它以查看功能及其工作原理。