51Testing软件测试论坛

标题: 怎样快速比较两个数组的值是否相等 [打印本页]

作者: 小鱼oO    时间: 2007-8-30 15:39
标题: 怎样快速比较两个数组的值是否相等
Dim A(4)
Dim B(4)
A(0)="A"
A(1)="B"
A(2)="C"
A(3)="D"
A(4)="E"
B(0)="B"
B(1)="A"
B(2)="C"
B(3)="E"
B(4)="D"
怎样快速比较两个数组的值相等?我写了一个方法比较,但是感觉效率太低,大家看看怎么修改?
'********************************************************************************************
'比较两个数组
'相等返回flag=0,否则flag=1
'********************************************************************************************
Function arrayComp(array_db,array_table,flag)
flag=1
aLen=Ubound(array_table,1)
bLen=Ubound(array_db,1)
If  aLen=bLen Then
For i=0 to aLen
        flag=1
        For j=0 to bLen
        flag=1
            If StrComp(array_db(i),array_table(j),1)<>0 and j=aLen Then
                        flag=1
                        Exit For
                        elseif StrComp(array_db(i),array_table(j),1)=0 Then
                        flag=0
                        Exit For
            End If       
        Next
            If flag=1 Then
                Exit For
            End If
Next
else
flag=1
End If
End Function
作者: danmy    时间: 2007-8-30 16:32
len1 = ubound(arr1)
len2 = ubound(arr2)
compareFlag = True

if len1 <> len2 then
    compareFlag = false
else
  for i = 0 to len1
     if arr1(i) <> arr2(i) then
       compareFlag = Flase
       exit for
     end if
     compareFlag = True
  next
end if
作者: danmy    时间: 2007-8-30 16:35
a = join(arr1,"!!")
b = join(arr2,"!!")

if a <> b then
  compareFlag = false
else
compareFlag = true
end if

[ 本帖最后由 danmy 于 2007-8-30 16:37 编辑 ]
作者: yuandjing    时间: 2007-8-30 17:37
哈哈,高手过招就是精彩
作者: zhumingwei    时间: 2007-8-30 19:36
原帖由 danmy 于 2007-8-30 16:35 发表
a = join(arr1,"!!")
b = join(arr2,"!!")

if a  b then
  compareFlag = false
else
compareFlag = true
end if

不明白为什么a = join(arr1,"!!")?
直接a = join(arr1)不可以吗?
作者: joseph_wh    时间: 2007-8-30 23:20
原帖由 zhumingwei 于 2007-8-30 19:36 发表

不明白为什么a = join(arr1,"!!")?
直接a = join(arr1)不可以吗?


我估计他是作为一个自定义的分隔符,毕竟如果变量里本身就有空格(“space”)的话,以后再拆分回去就有问题了。
作者: joseph_wh    时间: 2007-8-30 23:54
Dim strOriginalString, strOriginalArray(4), strArray, strFinalMsg

strOriginalArray(0) = "This "
strOriginalArray(1) = "is "
strOriginalArray(2) = "an "
strOriginalArray(3) = "example."

'---------------------------------------------------------------------------------------------
'Part one
strOriginalString = Join(strOriginalArray, "!!")
strArray = Split(strOriginalString, "!!", -1, 1)
strFinalMsg = strArray(0) & strArray(1)
strFinalMsg = strFinalMsg & strArray(2)
strFinalMsg = strFinalMsg & strArray(3)
MsgBox strFinalMsg

'==========================================
'Part two
strOriginalString = Join(strOriginalArray)
strArray = Split(strOriginalString, " ", -1, 1)
strFinalMsg = strArray(0) & strArray(1)
strFinalMsg = strFinalMsg & strArray(2)
strFinalMsg = strFinalMsg & strArray(3)
MsgBox strFinalMsg

'---------------------------------------------------------------------------------------------

效果是不一样的。
分隔符有时也很重要。
作者: walker1020    时间: 2007-8-31 00:05
不错,在讨论中各有收获,希望这样的帖子越多越好
作者: 小鱼oO    时间: 2007-8-31 09:30
标题: 回复 #2 danmy 的帖子
这样写,如果两个数组的内容相同,但是顺序不同,能比较出来两个数组是相同的吗?
作者: rivermen    时间: 2007-8-31 09:39
原帖由 小鱼oO 于 2007-8-31 09:30 发表
这样写,如果两个数组的内容相同,但是顺序不同,能比较出来两个数组是相同的吗?


不能,他用的是短路比较
一旦发现数组元素不一样,立刻置标志位,跳出循环,后面的不再比较了
作者: zhuyuancan    时间: 2007-8-31 09:46
还是用join函数方便
作者: jackymail    时间: 2007-8-31 10:09
数组的比较如果是全部项相等与否,那就太可笑了,这个题目意义不大!
作者: joseph_wh    时间: 2007-8-31 10:22
原帖由 jackymail 于 2007-8-31 10:09 发表
数组的比较如果是全部项相等与否,那就太可笑了,这个题目意义不大!



可以先排序,然后再比较啊。
作者: skyzhu    时间: 2007-8-31 10:40
标题: to lz
可以考虑先排序,再JOIN比较,可能比你那样快一点,代码看起来也清楚
作者: 小鱼oO    时间: 2007-8-31 18:03
关于数组排序谁有好的方法贴上来研究研究?
作者: yabest    时间: 2007-9-1 02:38
排序算法网上一搜一大把。
但是,在QTP里,有必要考虑算法速度嘛,我觉得最简单的算法就好了,谁会用QTP来做海量数据处理?!
作者: zhangj8826    时间: 2007-9-2 22:22
精彩




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2