我需要能够在一个集合中拥有独特的元素。
我打算使用字典,这样我就可以使用 ContainsKey 方法,但我认为这会很浪费,因为我不会使用键/值对的值属性。
我遇到了 HashSet<T>
这看起来很有前途。我唯一能找到但在 List<T>
中找不到的东西文档是HashSet<T>
是无序的。我认为这很好,我认为这意味着它不是使用 IEqualityComparer
订购的.只要项目的添加顺序在相同的索引位置,我认为就可以了,因为我必须进行重复检查,因此哈希集然后检查所有条目是否顺序。
在比较这两种类型时,我还遗漏了什么吗?
最佳答案
不,重要的是HashSet<T>
没有任何排序或索引的概念 - 列表在概念上有槽 0....n-1,而集合“只是一个集合”。
I think that is fine, I assume it means its not ordered using a IEqualityComparer.
IEqualityComparer
无论如何都不用于排序 - 它仅讨论相等性和哈希码。 HashSet<T>
不是按元素比较(例如,SortedSet<T>
是)或插入顺序排序。
As long as the order in which items are added are in the same index position I think it will be ok.
没有索引位置,当您遍历 HashSet<T>
时不能保证您会按照添加它们的顺序取回它们。如果您甚至考虑订购,HashSet<T>
这不是你想要的。
话又说回来,Dictionary<TKey, TValue>
的所有这些也是正确的- 你也不应该对在那里订购做出任何假设。
关于c# - HashSet<T> 是否与 List<T> 相同但具有唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777658/