数组比较
想比较两个数组中的值,存在重复值,将不同值保存到一个新的数组中并输出,但是自己写了一个,输出结果不太对,请大神们指点一下 放上代码复制改一下多方便,放图片多麻烦 回复 2# zhouhaijin#include <array.au3>
Dim $XH =
Dim $SC =
Dim $BT
For $i = 0 To UBound($SC) - 1
For $j = 0 To UBound($XH) - 1
If $SC[$i] <> $XH[$j] Then
ReDim $BT
$BT = $SC[$i]
EndIf
Next
Next
_ArrayDisplay($BT,"test") 回复 2# zhouhaijin
自己看了半天也没弄明白哪不对…………把<>改成=就显示没问题…… #include <array.au3>
Dim $XH =
Dim $SC =
Dim $BT
For $i = 0 To UBound($SC) - 1
For $j = 0 To UBound($XH) - 1
If $SC[$i] <> $XH[$j] Then
ReDim $BT
$BT = $SC[$i]
EndIf
Next
Next
_ArrayDisplay($BT,"test") 本帖最后由 zhouhaijin 于 2015-2-5 20:34 编辑
#include <Array.au3>
Local $a =
Local $b =
Local $c
For $i In $a
If _ArraySearch($b, $i) = -1 Then
If $c <> '' Then ReDim $c
$c = $i
EndIf
Next
For $i In $b
If _ArraySearch($a, $i) = -1 Then
If $c <> '' Then ReDim $c
$c = $i
EndIf
Next
_ArrayDisplay($c,"test") 回复 6# zhouhaijin
非常感谢!!
能帮我看看之前的代码哪里有问题吗? #include <array.au3>
Dim $XH =
Dim $SC =
Dim $BT
For $i = 0 To UBound($SC) - 1
For $j = 0 To UBound($XH) - 1
If $SC[$i] <> $XH[$j] Then ;这里$SC[$i]跟$XH对比就错了
ReDim $BT
$BT = $SC[$i]
EndIf
Next
Next
_ArrayDisplay($BT,"test") 本帖最后由 netegg 于 2015-2-5 20:43 编辑
回复 6# zhouhaijin
这是个人看法,觉得这样对吗,没排序的情况下呢,两个10元素的数组要遍历900次,不累吗
回复 1# lzare
楼主到底要什么结果 回复zhouhaijin
这是个人看法,觉得这样对吗,没排序的情况下呢,两个10元素的数组要遍历900次,不累吗
netegg 发表于 2015-2-5 20:39 http://www.autoitx.com/images/common/back.gif
200来次吧 回复 10# zhouhaijin
不可能,如果就没有相同的呢 转Qokelate的
#include-once
;参数:基础数组,要对比的数组
;返回:不同的元素(数组),$a=元素个数
;家庭版大内存占用,处理速度快
;企业版小内存占用,处理相比稍慢
;家庭版————中小型数组对比(区分元素数据大小写)
Func ArrayFindDifEleA(ByRef $aA, ByRef $aB)
Local $aRetn =
If Not IsArray($aA) Or Not IsArray($aB) Then Return $aRetn
For $a In $aA
Assign('_' & String(StringToBinary($a)), 0, 1)
Next
Local $Num = 0
For $b In $aB
If Not IsDeclared('_' & String(StringToBinary($b))) Then
$Num += 1
ReDim $aRetn[$Num + 1]
$aRetn[$Num] = $b
EndIf
Next
$aRetn = $Num
Return $aRetn
EndFunc ;==>ArrayFindDifEleA
;家庭版————中小型数组对比(不区分元素数据大小写)
Func ArrayFindDifEleB(ByRef $aA, ByRef $aB)
Local $aRetn =
If Not IsArray($aA) Or Not IsArray($aB) Then Return $aRetn
For $a In $aA
Assign('_' & String(StringToBinary(StringUpper($a))), 0, 1)
Next
Local $Num = 0
For $b In $aB
If Not IsDeclared('_' & String(StringToBinary(StringUpper($b)))) Then
$Num += 1
ReDim $aRetn[$Num + 1]
$aRetn[$Num] = $b
EndIf
Next
$aRetn = $Num
Return $aRetn
EndFunc ;==>ArrayFindDifEleB
#include <Hash\md5.au3>
;企业版————巨型数组对比(区分元素数据大小写)
Func ArrayFindDifEleC(ByRef $aA, ByRef $aB)
Local $aRetn =
If Not IsArray($aA) Or Not IsArray($aB) Then Return $aRetn
For $a In $aA
Assign('_' & _MD5($a), 0, 1)
Next
Local $Num = 0
For $b In $aB
If Not IsDeclared('_' & _MD5($b)) Then
$Num += 1
ReDim $aRetn[$Num + 1]
$aRetn[$Num] = $b
EndIf
Next
$aRetn = $Num
Return $aRetn
EndFunc ;==>ArrayFindDifEleC
;企业版————巨型数组对比(不区分元素数据大小写)
Func ArrayFindDifEleD(ByRef $aA, ByRef $aB)
Local $aRetn =
If Not IsArray($aA) Or Not IsArray($aB) Then Return $aRetn
For $a In $aA
Assign('_' & _MD5(StringUpper($a)), 0, 1)
Next
Local $Num = 0
For $b In $aB
If Not IsDeclared('_' & _MD5(StringUpper($b))) Then
$Num += 1
ReDim $aRetn[$Num + 1]
$aRetn[$Num] = $b
EndIf
Next
$aRetn = $Num
Return $aRetn
EndFunc ;==>ArrayFindDifEleD
#include <Array.au3>
Local $aA =
Local $aB =
Local $aC = ArrayFindDifEleD($aA, $aB)
_ArrayDisplay($aC) #include <Array.au3>
Local $a =
Local $b =
Local $c
For $i In $a;10次
If _ArraySearch($b, $i) = -1 Then;这个函数没进去看,当8次
If $c <> 0 Then ReDim $c
$c = $i
EndIf
Next
;上面10*8=80
;相加80+80=160
;下面10*8=80
For $i In $b;8次
If _ArraySearch($a, $i) = -1 Then;10次
ReDim $c
$c = $i
EndIf
Next
_ArrayDisplay($c,"test") 回复 9# netegg
#include <Array.au3>
Local $a =
Local $b =
Local $c
Local $d = $b
For $i In $a
$n = _ArraySearch($d, $i)
If $n = -1 Then
If $c <> '' Then ReDim $c
$c = $i
Else
$d[$n] = ''
EndIf
Next
For $i In $d
If $i <> '' Then
If $c <> '' Then ReDim $c
$c = $i
EndIf
Next
_ArrayDisplay($c, "test")
加个临时变量循环少点 #include<array.au3>
dim $i =0,$str=''
Dim $aA1 =
Dim $aA2 =
;Dim $aA3
_ArrayConcatenate($aA1, $aA2)
while $i <= ubound($aA1)-1
if ubound(_arrayfindall($aA1, $aA1[$i])) = 1 then
$str &= $aA1[$i] & '|'
EndIf
$i+=1
wend
MsgBox(0,0,$str)