如何快速过滤ListView控件中重复记录,10W条以上的数据(50)

  • 主题发起人 主题发起人 cty901
  • 开始时间 开始时间
C

cty901

Unregistered / Unconfirmed
GUEST, unregistred user!
请问用ListView如何快速的过滤掉重复的信息.如ListView中有10多万个数据项,里面有很多是相同的数据项,如何可以用最快的速度将相同的数据项删除掉.我的Listview中不是数据库里的数据,是从外界采集的数据,但又要求不能重复。就没法用select distinct来弄了。
 
1、创建临时表操作可以吗?2、lv上先排序,再删除,这种比较麻烦!
 
用ListView显示10多万的数据,显然是不能用Items.Add这样传统的方法加载的,能把界面给拖死.使用OwnerData的话,数据是内存中构建的,只要算法不是很差,依现在CPU的速度,合并同类项问题不大.
 
建议使用哈希表存储数据 listview显示使用虚拟填充。
 
谢谢几位的建议,但我还有些不明:to zkktom: 我的listview没有连接任何数据源,不知道你说的临时表是怎样操作呢?另外用lv先排序然后再删除这种方法我试过了,效率很低。。。to dmzn: 我这个程序的数据不是一次添加完成的,是从外部一次10~20多条这样逐步获取过来添加进去累计起来的,半个小时左右数据就累积到了2,30W条,现在的问题就是如何让这些数据不重复添加且要保持效率。。。因为不是一次性获取的。to 地质灾害: 哈希表我之前没用到过,能否贴下代码或描述一下思路?另外你说的虚拟填充是不是Virtual ListView???
 
再置顶!
 
哈希表这种常见的数据结构你不会google?TListView本身就支持虚拟填充。
 
用虚表+HashList来完成。在哈希表中进行排序,重复的直接删除。LV只是展示,后台跟哈希表挂接即可。
 
OwnerData=true;设置Items.CountOnData填充数据
 
再次感谢各位的帮助,我用StringList结合ListView解决了,我是从vb转型到delphi过来的菜鸟,其间又断断续续,所以delphi还不是很熟悉,再向地质灾害请教一下TListView的虚拟填充。。。希望贴一下示例代码,谢谢了先!
 
多人接受答案了。
 
后退
顶部