c# - HashSet<T> 是否与 List<T> 相同但具有唯一性?

标签 c# .net

我需要能够在一个集合中拥有独特的元素。

我打算使用字典,这样我就可以使用 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/

相关文章:

c# - EF代码优先,单向多对多关系不是由第二个实体的Id

c# - 处理重复的数据模型名称

c# - 我可以使用 Request.Url.Query 自动删除查询字符串上的参数吗?

c# - 如何将文本放在引号内

c# - MVVM ViewModel : Best practices? 规定的多个步骤

c# - 如何将元素反序列化为 XmlNode?

c# - 具有多个值的 System.Data.SQLite 参数化查询?

c# - 将一个集合中的所有项目与另一个集合中的项目进行比较?

c# - Web 服务返回具有空字段的对象

c# - 如何正确使用 NetMq Poller 接收数据