为什么.Net没有Set数据结构?

时间:2009-09-16 15:25:20

标签: .net data-structures set

我处理从Java迁移到.Net的一个最大问题是.Net中没有Set接口。我知道有可以去下载的库但是没有内置的原因是什么?有地图(字典)和列表,但为什么不是一个集?

编辑:我应该澄清一下,并非每个人都使用.Net 3.5 - 所以我或多或少都会引用旧版本的.Net

9 个答案:

答案 0 :(得分:8)

我认为这只是BCL作家的遗漏。 .NET 3.5有一个HashSet类;对于早期版本,我建议在值字段中包含一个包含空值的Dictionary< T,object>,以复制O(1)添加,删除和查找时间。

答案 1 :(得分:5)

在.NET 4.0中,HashSet将进行改进,甚至可以实现新的ISet接口。

答案 2 :(得分:4)

.NET 3.5有HashSet,可以完成所有设置操作。

答案 3 :(得分:3)

你的意思是HashSet吗?

答案 4 :(得分:3)

这些天有HashSet<T>,但遗憾的是没有我知道的界面。

答案 5 :(得分:3)

正如其他人所说,有一个HashSet<T>,实际上只是一个集合。

它前面有“哈希”的原因(因为它使用哈希来消除重复,因此集合的实现细节)是因为Set是VB.NET中的关键字。

答案 6 :(得分:2)

也许推理是一个集合实际上只是一个具有特定实现细节的列表,该列表限制其中的项目是不同的。由于列表的清晰度在实现而不是接口中,因此不需要接口。

正如其他人所提到的,FCL有HashSet<T>

答案 7 :(得分:2)

我最近也从Java迁到.Net(由于专业工作),我必须承认我最初的问题也出现在收藏品上。
在当前的.Net版本(3.5并谈到C#)中,您应该自己定位

  • ICollection
  • IList<T>
  • List<T>
  • IDictionary<TKey,TValue>
  • IEnumerable<T>

这些是最常用的(希望我没有错过)

答案 8 :(得分:1)

可能是出于教育方面的考虑。

一个典型的程序员将一个集合视为一个神奇的容器,无论其中包含多少元素,它都能正常工作。

如果没有明确的设置,程序员就会被迫从其他类型中进行选择,同时这样做会反映元素数量和适当的数据结构,以达到良好的性能。

只是猜测。