数组如何能更快速的去除重复?

ynduanlian 2011-04-11 02:41:49
一个数组,现在想去除前面已经有过的项。我的算法是:
依次读取第N(N从2开始)个值:然后从第一个开始到第N-1项,比较是否有与第N项相同的,如有,则删除第N个值,没有,则N=N+1。直至N等于数组上限


IWords=UBound(StrTmp1)
While (I <= IWords)
IsDuplicate = False
For K = 1 To I - 1
If StrComp(StrTmp1(I), StrTmp3(K), vbTextCompare) = 0 Then
IsDuplicate = True
Exit For
End If
Next
If IsDuplicate Then
' DeleteTheNode(I) 在数组StrTmp1中删除第I项
IWords = IWords - 1
else
I = I + 1
End If
Wend

相当于500行的数据,要检索2+3+4+5+6+……+499次 ,相当于比较125000次 ,程序要运行超过1个小时才能完成,高人帮看看,我的思路有什么问题?
...全文
169 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 supermanking 的回复:]
计算机尚未出现都被深入研究透了。
[/Quote]
ynduanlian 2011-04-11
  • 打赏
  • 举报
回复
分就只能很平均的给一下了,谢谢各位
dbcontrols 2011-04-11
  • 打赏
  • 举报
回复
看来是我一个错误导致了你的成功

[Quote=引用 13 楼 ynduanlian 的回复:]
不错!

我是要去除一个Word表格(有数百到上万行)中重复的行
我最后的解决方案是这样的:根据各位的提示,我想到Word自己有个排序功能,于是在程序中调用Word的排序功能(很快,几乎只有1到3秒,看来word有快带算法),然就我就只需要进行相邻行比较就行了,这样弄下来以后,所需时间由近3小时压缩到3分钟左右,我觉得这个时间已经可以接受了!
[/Quote]
ynduanlian 2011-04-11
  • 打赏
  • 举报
回复
不错!

我是要去除一个Word表格(有数百到上万行)中重复的行
我最后的解决方案是这样的:根据各位的提示,我想到Word自己有个排序功能,于是在程序中调用Word的排序功能(很快,几乎只有1到3秒,看来word有快带算法),然就我就只需要进行相邻行比较就行了,这样弄下来以后,所需时间由近3小时压缩到3分钟左右,我觉得这个时间已经可以接受了!


现在还是人类 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yiguangqiang88 的回复:]
5楼的连接对这个问题已经有人做了深入的研究,楼主可以结帖了。
[/Quote]
计算机尚未出现都被深入研究透了。
dbcontrols 2011-04-11
  • 打赏
  • 举报
回复
这得看数据量了

[Quote=引用 10 楼 king06 的回复:]
推荐使用数据库来操作
[/Quote]
king06 2011-04-11
  • 打赏
  • 举报
回复
推荐使用数据库来操作
  • 打赏
  • 举报
回复
5楼的接表明,已经有人对这个问题做了深入的研究,楼主可以结帖了。
  • 打赏
  • 举报
回复
5楼的连接对这个问题已经有人做了深入的研究,楼主可以结帖了。
vbman2003 2011-04-11
  • 打赏
  • 举报
回复
通常是用字典处理一下....
  • 打赏
  • 举报
回复
这个思路可以一试,先排序,再按照相邻的比较,不知道会快些不?
dbcontrols 2011-04-11
  • 打赏
  • 举报
回复
搞错了
看这里

[Quote=引用 3 楼 yiguangqiang88 的回复:]
引用 2 楼 dbcontrols 的回复:
看看这里
非也,非也
[/Quote]
ynduanlian 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dbcontrols 的回复:]
看看这里
[/Quote]
你的意思是要先排序,再去重?
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dbcontrols 的回复:]
看看这里
[/Quote]非也,非也
dbcontrols 2011-04-11
  • 打赏
  • 举报
回复
ynduanlian 2011-04-11
  • 打赏
  • 举报
回复

IWords=UBound(StrTmp1)
While (I <= IWords)
IsDuplicate = False
For K = 1 To I - 1
If StrComp(StrTmp1(I), StrTmp3(K), vbTextCompare) = 0 Then
IsDuplicate = True
Exit For
End If
Next
If IsDuplicate Then
' DeleteTheNode(I) 在数组StrTmp1中删除第I项
IWords = IWords - 1
else
I = I + 1
End If
Wend

7,763

社区成员

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

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