2012-01-13 38 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>代表一個集合,並提供集合操作,因此名稱。這是我們使用它的原因。