Значения Distinct () по-прежнему допускают дублирование - PullRequest
0 голосов
/ 28 мая 2020

Это еще одна проблема программирования, в которой, я думаю, все выглядит нормально, но не работает должным образом.

Я пытаюсь очистить все ссылки с веб-страницы с помощью htmlagilitypack и добавить их в сетку данных, но НЕ для добавления дубликатов в сетку данных.

Код:

webBrowser.Navigate(url);

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(webBrowser.DocumentText);

if (debug)
{
    Helpers.SaveDebugToFile(@"Debug\[google.com]-" + DateTime.Now.ToString("hhmmssffffff") + "-debug.html", webBrowser.DocumentText);
}

List<string> values = new List<string>();

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    HtmlAttribute href = link.Attributes["href"];

    if (href.Value.Contains("google.") || href.Value.Contains("search?") || href.Value.StartsWith("/") || href.Value.Length < 5)
    {
        // Ignore.
    }
    else
    {
        // DO NOT ADD TO THE DATAGRID IF href.Value ALREADY EXISTS IN COLUMN 1 //
        values.Add(href.Value);
    }
}

foreach (var value in values.Distinct().ToList())
{
    DataGridViewLinks.Rows.Add(value, randomKeyword);
}

Код работает, но он все еще добавляет дубликаты в первый столбец, но я добавляю только Distinct() значений (или это то, что я намеревался сделать).

Я не вижу причины этой проблемы, я просмотрел код несколько раз и не заметил ничего очевидного.

EDIT:

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Вместо использования Distinct непосредственно в for l oop вы можете проверить результат в Списке, какие все значения вы получаете, а затем определить, в этом или другом разделе кода проблема. Возможно, список добавляется во время итерации l oop.

0 голосов
/ 28 мая 2020

Как уже упоминалось в комментариях выше, скорее всего, где-то содержимое не совсем равно (другой регистр, некоторые начальные или конечные пробелы, ...)

Лучше было бы проверить дубликаты ( с заданным регистром и удалением пробелов), уже при вставке в список «значений»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...