【发布时间】:2017-04-14 15:00:08
【问题描述】:
有没有人有更快更好的方法从列表视图中删除重复项?我目前正在这样做:我按字母顺序对项目进行排序,然后检查下面的项目并将其与上面的项目进行比较。
虽然这很耗时.. 当我在 Excel 表中输入 20.000 条记录并删除重复项时,需要几毫秒,但使用下面的代码,检查 vb.net 中的 20.000 条记录需要数小时。有人知道更快的方法吗?
Dim max As Integer = ListView2.Items.Count
Dim i As Integer = 0
For Each item As ListViewItem In ListView2.Items
If i = max Then
Exit For
End If
If i > 0 Then
If item.Text = ListView2.Items(i - 1).Text Then
max -= 1
item.Remove()
i -= 1
End If
End If
i += 1
Label4.Text = "Total domains: " & ListView2.Items.Count
Next
【问题讨论】:
-
在 for-each 循环中删除项目通常是个坏主意。通常最好处理列表的副本或在循环中以相反的顺序进行。 “缓慢”可能归因于控件试图在每次删除项目时重绘所有内容。见How do I suspend painting for a control and its children?
-
类似地,使用绑定到数据源的 DataGridView,这样您就可以轻松地检查该数据源,而不是从一开始就添加欺骗。无论如何,管理源代码会更快。控件并非用于数据存储,而是向用户呈现数据的视图。
-
@Plutonix 我可能会这样做。
标签: vb.net listview duplicates