2013-11-08 4 views
0

Мне нужно иметь возможность удалять повторяющиеся записи в datagridview быстро. К сожалению, способ, которым я занимаюсь, может занять несколько минут с чем-то выше 100 тыс. Предметов.Как вы удаляете дубликаты из большого datagridview?

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

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!") 

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

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

ответ

0

Вместо того, чтобы сначала добавить его в 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!") 
Смежные вопросы