lzare 发表于 2015-2-5 20:04:55

数组比较

想比较两个数组中的值,存在重复值,将不同值保存到一个新的数组中并输出,但是自己写了一个,输出结果不太对,请大神们指点一下

zhouhaijin 发表于 2015-2-5 20:15:04

放上代码复制改一下多方便,放图片多麻烦

lzare 发表于 2015-2-5 20:18:54

回复 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")

lzare 发表于 2015-2-5 20:19:49

回复 2# zhouhaijin


自己看了半天也没弄明白哪不对…………把<>改成=就显示没问题……

lzare 发表于 2015-2-5 20:20:25

#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:31:02

本帖最后由 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")

lzare 发表于 2015-2-5 20:31:16

回复 6# zhouhaijin

    非常感谢!!
    能帮我看看之前的代码哪里有问题吗?

zhouhaijin 发表于 2015-2-5 20:37:57

#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:39:18

本帖最后由 netegg 于 2015-2-5 20:43 编辑

回复 6# zhouhaijin
这是个人看法,觉得这样对吗,没排序的情况下呢,两个10元素的数组要遍历900次,不累吗
回复 1# lzare
楼主到底要什么结果

zhouhaijin 发表于 2015-2-5 20:42:10

回复zhouhaijin
这是个人看法,觉得这样对吗,没排序的情况下呢,两个10元素的数组要遍历900次,不累吗
netegg 发表于 2015-2-5 20:39 http://www.autoitx.com/images/common/back.gif


    200来次吧

netegg 发表于 2015-2-5 20:44:34

回复 10# zhouhaijin
不可能,如果就没有相同的呢

zhouhaijin 发表于 2015-2-5 20:45:46

转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)

zhouhaijin 发表于 2015-2-5 20:53:29

#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")

zhouhaijin 发表于 2015-2-5 21:19:35

回复 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")

加个临时变量循环少点

netegg 发表于 2015-2-5 21:29:57

#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)
页: [1] 2 3
查看完整版本: 数组比较