C# 使用整数集合检查是否存在最有效的方法是什么?

C# 使用整数集合检查是否存在最有效的方法是什么?,c#,.net,generics,types,unique,C#,.net,Generics,Types,Unique,我有一个大的整数列表,这些整数被发送到我的Web服务。我们的业务规则规定这些值必须是唯一的。找出是否存在重复项的最有效方法是什么?我不需要知道这些值,我只需要知道其中两个值是否相等 起初我考虑使用一个通用的整数列表和List.Exists()方法,但这是O(n) 然后我考虑使用字典和ContainsKey方法。但是,我只需要键,不需要值。我认为这也是一个线性搜索 是否有更好的数据类型用于查找列表中的唯一性?还是我一直在进行线性搜索?使用: HashSet类提供了高性能的 性能集操作。一套就是一套

我有一个大的整数列表,这些整数被发送到我的Web服务。我们的业务规则规定这些值必须是唯一的。找出是否存在重复项的最有效方法是什么?我不需要知道这些值,我只需要知道其中两个值是否相等

起初我考虑使用一个通用的整数列表和List.Exists()方法,但这是O(n)

然后我考虑使用字典和ContainsKey方法。但是,我只需要键,不需要值。我认为这也是一个线性搜索

是否有更好的数据类型用于查找列表中的唯一性?还是我一直在进行线性搜索?

使用:

HashSet类提供了高性能的 性能集操作。一套就是一套 不包含重复项的集合 元素,并且其元素不在 特殊订单


HashSet
甚至公开。通过将您的
列表
传递给
哈希集的
构造函数,您将得到一个新的
哈希集
的引用,该哈希集将包含与原始
列表
不同的项目序列。听起来像是一个…

的作业。如果您使用的是framework 3.5,那么您可以使用
哈希集
集合

否则,最好的选择是
字典
。每个项目的价值都将被浪费,但这将为您提供最佳性能


如果在将项目添加到哈希集/字典时检查重复项,而不是在之后对其进行计数,那么在存在重复项的情况下,您的性能会比O(n)更好,因为您不必在找到第一个重复项后继续查找。

如果数字集是稀疏的,则按照其他人的建议使用哈希集

但是,如果数字集大部分是按顺序排列的,偶尔有间隙,那么将数字集存储为排序数组或开始、结束对的二叉树会更好。然后,您可以搜索以找到起始值最大且小于搜索键的配对,并与该配对的结束值进行比较,以查看该配对是否存在于集合中。

如何操作:

list.Distinct().Count() != list.Count() 

我想知道这个的表现如何。我认为它与O(n)一样好,但代码更少,仍然易于阅读。

当inputList.Count!=hashSet.Count,“Houston,我们有重复项!”这仍然是O(n),我认为他能得到的最好结果。@Andrew:他可以将这些项逐个添加到hashSet中,并在hashSet后立即返回异常。ContainsKey(item)==true。如果有一个重复的变量,@SixlettVariables-非常正确,在这一点上,他将不再需要
HashSet
,因为
IList
的任何实现都有
包含
方法。