2012-01-13 40 views
0

我在C#中有问题的HashSet ....中的Hashset C#是给人一种奇怪的行为

这是我的代码:

List<int> elements = new List<int>(); 
     for(int i = 0;i< 100000;i++) 
     { 
      elements.Add(i); 
     } 
     HashSet<int> c = new HashSet<int>(); 
     foreach(var ele in elements) 
     { 
     c.Add(ele); 
     } 

     Console.WriteLine("Working HashSet " + c.Count); 

     var Numbers = new HashSet<int>(); 
     var mycount = 0; 
     using (TextReader reader = File.OpenText(@"myfile.txt")) 
     { 
      while ((line = reader.ReadLine()) != null) 
      { 
       mycount++; 
       int parsed = int.Parse(line); 
       Numbers.Add(parsed); 
      } 
     } 

     Console.WriteLine("my counter took" + mycount); 

     Console.WriteLine("Bad HashSet" + Numbers.Count); 

工作的HashSet 100 000

我反了500 000

坏的HashSet 9999

为什么第二HashSet中不加入500 00 0项目???? 这对我来说是一个神秘的东西

+5

'myfile.txt'中有多少*个不同的*号? – AakashM 2012-01-13 11:27:52

+0

这里没有比较,在txt文件中是什么? Numbers.Add(mycount);'给你那个数字! – V4Vendetta 2012-01-13 11:29:51

+0

试试'myCount + =(Numbers.Add(parsed))? 1:0'而不是'myCount ++' – Joe 2012-01-13 12:10:15

回答

3

您的列表包含500.000项其中有9999独特。

5

A HashSet将不会添加重复的数字,因为这是套路的工作方式。

例如,假设这些都是myfile.txt的前几行:

1 
2 
3 
1 
2 
3 
4 

你会遍历7个值,但只有4识别号这些线路,而HashSet中不会添加重复1,2或3.在你的情况下,你有500,000行,但只有9,999个唯一的数字。

+2

你可以看看Add方法的(bool)结果,看看这个数字是否已经添加(true)或不是(false),因为它已经存在。 – Ray 2012-01-13 11:39:16

0

大概有一些重复。 HashSet<T>代表一个集合,并提供集合操作,因此名称。这是我们使用它的原因。