你如何快速从大数据网格中删除重复项?

时间:2013-11-08 19:31:46

标签: datagridview duplicates vb.net-2010 virtualmode

我需要能够快速删除datagridview中的重复条目。不幸的是,我这样做的方式可能需要几分钟,任何超过100K的物品。

以下是我正在使用的代码:

  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处于虚拟模式以支持大量数据。

如果有人能帮我找出快速删除欺骗的方法,我会非常感激。

1 个答案:

答案 0 :(得分: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!")