【问题标题】:Hashset in c# is giving a strange behaviorc# 中的 Hashset 给出了一种奇怪的行为
【发布时间】:2012-01-13 11:25:50
【问题描述】:

我在 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);

工作哈希集 100 000

我的柜台花了 500 000

错误的哈希集 9999

为什么第二个哈希集没有添加 500 000 个项目???? 这对我来说是个谜

【问题讨论】:

  • myfile.txt 中有多少个不同的数?
  • 这里没有比较,txt文件里有什么? Numbers.Add(mycount); 有没有给你这个数字!
  • 试试myCount += (Numbers.Add(parsed)) ? 1 : 0 而不是myCount++

标签: c# data-structures memory-management while-loop hashset


【解决方案1】:

HashSet 不会添加重复的数字,因为这是集合的工作方式。

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

1
2
3
1
2
3
4

您将迭代 7 个值,但这些行中只有 4 个唯一数字,并且 HashSet 不会添加 1、2 或 3 的重复项。在您的情况下,您有 500,000 行但只有 9,999 个唯一数字。

【讨论】:

  • 您可以查看Add 方法的(bool)结果,以查看该数字是否已添加(true)或未添加(false),因为它已经存在。
【解决方案2】:

您的列表包含 500.000 项,其中有 9999 个唯一项。

【讨论】:

    【解决方案3】:

    大概有一些重复。 HashSet&lt;T&gt; 代表一个集合,并提供集合操作,因此得名。这就是我们使用它的目的。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2012-03-16
      • 1970-01-01
      • 2011-06-28
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2015-09-27
      相关资源
      最近更新 更多