数组对比问题?

现在还是人类 2008-04-20 09:53:47
有没有一种比较快速的方法判断两个数组是否一致?
针对比较大的数组而言,如果中间只是一两个小地方
不同,用VB的循环判断就太没效率了。如果要处理多
个数组就更加慢。
打个比方,我一次需要判断1000个文件,每个文件都
是10M大小,我需要把文件都一个一个的读入内存数组
中来做对比,可能中间只有一两个文件是不同的,怎么
作才能达到最快判断数组是否一致的速度呢?
还有,我主要是想做内存对比操作,之所以打比喻说
对比文件数据,是因为我要对比的内存数据比较大而已。
...全文
111 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
接分先!
现在还是人类 2008-04-24
  • 打赏
  • 举报
回复
我原来的做法就是用循环,方法还想了几种
1、对于数组范围的对比
2、做数组特征的对比(就是当两个数组大小一样的情况下,随机对比10处地方的32位Bit看看是否一致)
3、完全对比(以上方法都一样的情况下使用)
方法是用CopyMemory函数将数组内容放到Long里进行核对
...
For X = 0 To ForCount - 1
CopyMemory Contrast1, Array1(X * 4), 4
CopyMemory Contrast2, Array2(X * 4), 4
If Contrast1 <> Contrast2 Then
SearchMEM = 3
Exit Function
End If
Next X
...
这样做的目的是因为vb是32位的东西,用Long运算是最快的
但我还是认为我这种作法不是最快的方法,有谁能提供更好的方案吗?
舉杯邀明月 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lyserver 的回复:]
当然要用循环啊。
简单说一下比较的原理,所有程序一般都由操作码和操作数组成,操作码包括赋值、比较等指令,操作数可以是一个寄存器或几个寄存器的组合,以及内存中的一段地址。内存比较,其实质是对两段地址中的字节内容进行比较。而在这两段内容虽然可以同时存在于内存里,但在32位操作系统里,操作码一次一般只能将4个字节的操作数送往CPU,也就是说,如果两段内存的内容大于4字节,必须通过循环才能分别实现比较,不可能…
[/Quote]

Ding...............
波导终结者 2008-04-21
  • 打赏
  • 举报
回复
要比较,必定要循环每一个元素。若有现成的,也只是封装好的循环吧。
现在还是人类 2008-04-21
  • 打赏
  • 举报
回复
没有更加好一点的方法吗?
比如用 Is 语句或API之类的?
舉杯邀明月 2008-04-20
  • 打赏
  • 举报
回复
Mark....

Up.....
lyserver 2008-04-20
  • 打赏
  • 举报
回复
先使用内存影射的形式将需要比较的文件打开,然后按长整形数组进行比较,关于内存比较,我曾在以下贴子中作了详细的说明:
http://topic.csdn.net/u/20080309/09/c70e2f34-46c8-43aa-a094-0bb4bc5f159a.html
lyserver 2008-04-20
  • 打赏
  • 举报
回复
另外,C++可以通过重载运算符“=”来判断两个串是否相等,但是,比较的过程(即循环比较),仍然需要写在重载函数里,所以说,数据块比较,不可能不使用循环,只不过循环被放在了哪个位置而已。
lyserver 2008-04-20
  • 打赏
  • 举报
回复
在C++里,还提供了伪64位数据,即__int64,它是使用了两个寄存器来表示一个数,但比单独的一个32位数据多出了几倍的指令运行周期,使用它还不如直接使用long类型来得快。
lyserver 2008-04-20
  • 打赏
  • 举报
回复
当然要用循环啊。
简单说一下比较的原理,所有程序一般都由操作码和操作数组成,操作码包括赋值、比较等指令,操作数可以是一个寄存器或几个寄存器的组合,以及内存中的一段地址。内存比较,其实质是对两段地址中的字节内容进行比较。而在这两段内容虽然可以同时存在于内存里,但在32位操作系统里,操作码一次一般只能将4个字节的操作数送往CPU,也就是说,如果两段内存的内容大于4字节,必须通过循环才能分别实现比较,不可能直接把大块操作数直接送往CPU。所以循环是避免不了的。有的函数如C++里的strcomp、memcmp之类的函数,只不过把循环过程封装到了函数里面而已。
现在还是人类 2008-04-20
  • 打赏
  • 举报
回复
都还是用循环作对比咧

7,763

社区成员

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

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