如何用VB快速清除上限为数万的数组中的重复元素

TFZM_DB 2008-07-25 11:51:02
如何快速清除上限为数万的数组中的重复元素?比如,数组类型为字符型或长整形都能清楚重复的项变成一个新的数组。例,A(0)=54 A(1)=76 A(2)=203 A(3)=76 A(4)=789 A(5)=789......A(36000)=546
我编写了一个程序,但非常慢,耗时很长(达1分钟多)。有没有更快的算法?望高人指点!!
qq 305468972
...全文
500 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
freehack 2010-06-27
  • 打赏
  • 举报
回复
我到是写了一般般的算法...就是重复的越多,速度越快,目前我的数组是 24万 , 主要对一副图像的所有色值去重复的....思路是 从第一个开始,遍历所有数组,发现第一个和后面的任意一个重复,都把重复的那个和最后一个替换掉,并且数组长度-1,如此..循环

'开始启动过滤
Dim Start As Long
Dim Gw As Long
Dim Tmp As Long
Start = 0

Do While Start < Duibi_init
For Gw = Start To Duibi_init - 1
RollBack:
If Duibi(Start) = Duibi(Gw + 1) Then '如果找到相同的
Duibi(Gw + 1) = Duibi(Duibi_init) '用最后一个把相同的冲掉
Duibi_init = Duibi_init - 1 '数组长度-1
GoTo RollBack
End If
Next Gw
Start = Start + 1
DoEvents
Loop


楼主如果还没明白可以加我 QQ 43729417
zhufenghappy 2008-07-25
  • 打赏
  • 举报
回复
只有遍历,就是看你的算法复杂度的问题
僵哥 2008-07-25
  • 打赏
  • 举报
回复
如果仅只是你上面列出来的,不超一千的数据,那直接把里面的值当Hash值放到Hash表当中就可以了.
TFZM_DB 2008-07-25
  • 打赏
  • 举报
回复
都没有解决问题。遗憾
vbman2003 2008-07-25
  • 打赏
  • 举报
回复
字符型的话你要慎用Filter,这个只相当于like,并不是等于......
vbman2003 2008-07-25
  • 打赏
  • 举报
回复
给你一个整形的思路:


dim lng(36000) as long    '这个是你要检测的原始数组
dim bol() as boolean
dim i as long,idx as long

redim lngnew(3600) as long  '这个是没有重复值的新数组
redim bol(数组lng的最大值)

idx=-1
for i=0 to 36000
if not bol(lng(i)) then
idx=idx+1
lngnew(idx)=lng(i)
bol(lng(i))=true
end if
next

redim preserve lngNew(idx)
TFZM_DB 2008-07-25
  • 打赏
  • 举报
回复
我原来的代码如下:

Public Function GetArryNew(ArryOld() As String) As String()
'***********************************************************************
'此函数返回一个数组,且该数组确保ArryOld()数组中所有相同值的数组项被剔除
'使用前要确保ArryOld()数组的数据类型为String型
'***********************************************************************
Dim I As Long, K As Long
For I = LBound(ArryOld) To UBound(ArryOld)
For K = LBound(ArryOld) + 1 To UBound(ArryOld)
If ArryOld(I) = ArryOld(J) Then ArryOld(J) = Chr(9)
Next K
Next I
GetArryNew = Filter(ArryOld, Chr(9), False, vbTextCompare)
End Function
事实上,当上标很大比如上万的数据,这种方法很慢。有没有高人解决啊?
vbman2003 2008-07-25
  • 打赏
  • 举报
回复
整形相对简单一点吧.....
熊孩子开学喽 2008-07-25
  • 打赏
  • 举报
回复
排序问题.复杂度O2,字符串数组的话比整数数组还要慢一个数量级

7,787

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧