VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 887|回复: 3

[求助] CtrlList控件 如何高效去除重复项?

[复制链接]
69_avatar_middle
在线会员 发表于 2017-5-27 13:42:11 | 显示全部楼层 |阅读模式
3驿站币
列表控件有正常和异常两类数据,

我先清除异常项的数据,然后再逐个过滤正常项的重复

       for(i=0;i<dlg->m_list.GetItemCount();i++)
        {
                if(dlg->m_list.GetItemText(i,2).Find("异常")==-1)
                {
                        dlg->m_list.DeleteItem(i);
                        i--;
                }
        }

        int j=0;
        CString str1,str2;
        for(i=0;i<dlg->m_list.GetItemCount()-1;i++)
        {
                str1=dlg->m_list.GetItemText(i,1);
                for(j=i+1;j<dlg->m_list.GetItemCount();j++)
            {
                        str2=dlg->m_list.GetItemText(j,1);
                        if(str1==str2)
                        {
                                dlg->m_list.DeleteItem(j);
                                j--;
                        }
            }
        }

这样效率很低,几千条数据就会用1-2分钟的时间,有没有其他高效的方法啊?





上一篇:vc如何绘制频谱图
下一篇:VC6.0对话框如何添加scrollview
51_avatar_middle
online_admins 发表于 2017-5-27 14:31:49 | 显示全部楼层
你这样直接操作控件上面的数据肯定会慢,临时想到一个办法,就是你内存中是否有listctrl的所有数据,如果没有的话就先for循环获取一遍,之后在内存中进行正常和异常两类数据的筛选。筛选完成后将listctrl列表数据清空,再把筛选结果显示到listctrl上面,这样会不会快一点?
69_avatar_middle
ico_lz  楼主| 发表于 2017-5-27 18:19:19 | 显示全部楼层
Syc 发表于 2017-5-27 14:31
你这样直接操作控件上面的数据肯定会慢,临时想到一个办法,就是你内存中是否有listctrl的所有数据,如果没 ...

好的,我试试,谢谢老大
83_avatar_middle
在线会员 发表于 2017-6-1 01:21:34 | 显示全部楼层
很显然,放在内存中处理好再显示了.
但是关于CTRLLIST,事实上它有一个所谓的虚拟列表技术,其实就是重写一下当前显示内容,这样显示时,它总只是显示当前位置的内容.可以有效的提高使用体验.搜一下虚拟列表就能找到了.
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-19 12:50

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表