理想的内存数据结构,用于删除大约的重复数据。 100,000整数

时间:2012-02-11 10:02:11

标签: c# data-structures

我想加载一个包含大约100,000个整数的文件。在加载过程中,我想删除重复项并将其余部分插入数据库。

  1. C#中理想的数据结构是什么?

  2. B树是否适合我的情况,如果是这样,C#中是否有B树实现?

  3. (我是C#的新手。)

3 个答案:

答案 0 :(得分:4)

我只是使用HashSet<T>。它将忽略重复。

请注意,枚举HashSet<T>会以未指定的顺序返回元素。


如果您需要排序,请查看SortedDictionary<TKey, TValue>。它是基于树的,可能会更慢。

答案 1 :(得分:0)

假设1L == 1Lakh,这不是很大。

只使用不允许重复的集合类型,例如HashSet

  

HashSet(Of T)类提供高性能的集合操作。集合是一个不包含重复元素的集合,其元素没有特定的顺序。

答案 2 :(得分:0)

  

C#中理想的数据结构是什么?

应主要根据问题选择适当的数据结构。只有这样,编程语言,范例或类框架才会影响该选择。

话虽这么说,HashSet<int>可以很好地完成这项任务:

至少在.NET 4中,这是ISet<T>接口的实现,它为数学sets建模。与multisets(也称为 bags )不同,它们仅包含不同的成员。因此,如果您将相同的值两次添加到同一HashSet<int>,则只会包含一次。

HashSet<T>即使使用大型集也应该具有良好的性能,因为它是根据哈希表实现的(顾名思义)。

如果您要将值插入关系数据库(其中记录也是无序的),那么集合无序的事实应该无关紧要。

  

B树是否适合我的情况,如果是这样,C#中是否有B树实现?

(请注意,类库不属于C#,语言,而是.NET,平台!)

我不知道你为什么特意提到B-tree,但不,.NET BCL(基类库)不包含B树的实现。

如果您需要使用persistent data structures,那么基于树的解决方案可能确实比HashSet<T>更适合,这是可变的。