Как БЫСТРО удалить дубликаты из большого обзора данных?
Мне нужно иметь возможность быстро удалить дубликаты записей в сетке данных. К сожалению, то, как я это делаю, может занять несколько минут с чем-то более 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!")