Как БЫСТРО удалить дубликаты из большого обзора данных?

Мне нужно иметь возможность быстро удалить дубликаты записей в сетке данных. К сожалению, то, как я это делаю, может занять несколько минут с чем-то более 100К предметов.

Вот код, который я использую:

  Dim wordlist As New List(Of String)
    Dim numCols As Integer = DataGridView1.ColumnCount
    Dim numRows As Integer = DataGridView1.RowCount - 1
    Dim wordlist2 As New List(Of String)

    For count As Integer = 0 To numRows - 1
        wordlist.Add(DataGridView1.Rows(count).Cells("url").Value)
    Next

    For Each word As String In wordlist
        If Not wordlist2.Contains(word) Then
            wordlist2.Add(word)
        End If
    Next

    fullitem.Clear()

    For Each word2 As String In wordlist2
        fullitem.Add(New item(word2, "", ""))

    Next

    DataGridView1.RowCount = fullitem.Count + 1
    MessageBox.Show("Done!")

Сетка данных находится в виртуальном режиме для поддержки огромных объемов данных.

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

1 ответ

Решение

Вместо того, чтобы сначала добавлять его в wordList, а затем проходить по нему и проверять при добавлении его во второй список, просто проверяйте, добавляете ли вы его в первый список. Кроме того, мы сразу добавляем его в fullitem (понятия не имею, что это такое, вы не показываете, что это такое). Мы просто используем список для содержимого.

Таким образом, мы уменьшаем три цикла до одного.

Dim wordlist As New List(Of String)
Dim numCols As Integer = DataGridView1.ColumnCount
Dim numRows As Integer = DataGridView1.RowCount - 1
Dim word As String

fullitem.Clear()

For count As Integer = 0 To numRows - 1
    word = DataGridView1.Rows(count).Cells("url").Value
    If Not wordlist.Contains(word) Then
        wordlist.Add(word)
        fullitem.Add(New item(word, "", ""))
    End If
Next

DataGridView1.RowCount = fullitem.Count + 1
MessageBox.Show("Done!")
Другие вопросы по тегам