Hashset в C # дает странное поведение - PullRequest
0 голосов
/ 13 января 2012

У меня проблема с 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

Bad HashSet 9999

почему второй хэш-сет не добавляет 500 000 элементов ????это для меня загадка

Ответы [ 3 ]

5 голосов
/ 13 января 2012

A HashSet не будет добавлять дубликаты чисел, потому что так работают наборы.

Например, предположим, что это первые несколько строк myfile.txt:

1
2
3
1
2
3
4

Вы будете повторять более 7 значений, но в этих строках будет только 4 уникальных числа, и HashSet не будет добавлять дубликаты 1, 2 или 3. В вашем случае у вас 500 000 строк, но только 9 999 уникальных номеров.

3 голосов
/ 13 января 2012

Ваш список содержит 500 000 наименований, из которых 9999 уникальных.

0 голосов
/ 13 января 2012

Предположительно, есть несколько дубликатов. HashSet<T> представляет набор и предоставляет операции над множествами, отсюда и название. Это то, для чего мы его используем.

...