0

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 は、大量のデータをサポートするために仮想モードになっています。

誰かが重複を削除するための迅速な方法を見つけ出すのを手伝ってくれたら、本当に感謝しています.

4

1 に答える 1

0

最初にそれを wordList に追加してから、それをループして 2 番目のリストに追加するときにチェックする代わりに、最初のリストに追加するときにチェックするだけです。また、すぐに fullitem に追加します (それが何であるかはわかりません。表示されません)。含むリストを使用するだけです。

このようにして、3 つのループを 1 つに減らします。

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!")
于 2013-11-08T19:38:25.637 に答える