我在C#中遇到HashSet问题....
这是我的代码:
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
我的柜台拿了50万
Bad HashSet 9999
为什么第二个hashset没有添加500 000个项目???? 这对我来说是一个谜。
答案 0 :(得分:5)
HashSet
不会添加重复的数字,因为这是设置工作的方式。
例如,假设这些是myfile.txt
的前几行:
1
2
3
1
2
3
4
您将迭代7个值,但这些行中只有4个唯一数字,而HashSet不会添加1,2或3的重复数。在您的情况下,您有500,000行但只有9,999个唯一数字。
答案 1 :(得分:3)
您的列表包含500,000个项目,其中有9999个唯一项目。
答案 2 :(得分:0)
据推测,有一些重复。 HashSet<T>
表示一个集合,并提供集合操作,因此提供名称。这就是我们用它的原因。