jonyzhr 发表于 2010-7-5 21:38:23

求一个函数是比较两个数组内容是否相同(支持2维数组)

如题,比如我有两个数组,如果想比较两个数组是否相同(维度,内容比较)该如何写,请高手给条思路.

水木子 发表于 2010-7-5 22:16:17

相同维度、内容是否相同,是这样比较吗?

3mile 发表于 2010-7-5 22:49:06

#include <array.au3>
Dim $avArray = , $anArray = ["A", "B", "C", "D", "E"]
Compare($avArray, $anArray)

Func Compare($arr1, $arr2)
        If IsArray($avArray) And IsArray($anArray) Then
                $arr1 = $avArray
                $arr2 = $anArray
                If UBound($avArray, 0) == UBound($avArray, 0) Then
                        $num = UBound($avArray, 0)
                        If UBound($arr1) == UBound($arr2) Then
                                $comp = StringCompare(_ArrayToString($arr1, ""), _ArrayToString($arr2, ""), 1)
                                If $comp = 0 Then
                                        MsgBox(0, 0, "两数组相等")
                                Else
                                        MsgBox(0, 0, "不相等")
                                EndIf
                        Else
                                MsgBox(64, "", "数组数量不同,比较无意义")
                        EndIf
                Else
                        MsgBox(64, "", "数组维度不同,比较无意义")
                EndIf
        Else
                MsgBox(64, "wring", "不是数组")
        EndIf
EndFunc   ;==>Compare

netegg 发表于 2010-7-6 09:35:21

用gdi矩阵套过来不知道行不行

jonyzhr 发表于 2010-7-6 09:39:38

回复 3# 3mile


    谢谢你的代码,但是好像_ArrayToString这个只是相对一维数组而已吧,对于二维数组可就....

3mile 发表于 2010-7-6 10:17:53

增加一个判断,If ubound($arr1,0)>1 OR ubound($arr2,0)>1 then msgbox(0,"","多维数组")

jonyzhr 发表于 2010-7-6 23:41:12

回复 6# 3mile


   我的代码跟你的有点不同,不知道这样做可不可以,,无论循序怎么样都好像可以判断,就是没有办法想出二维的如下:#include <Array.au3>
Local $array1 = ["3", "1", "2",""]
Local $array2 = ["2", "1", "3"]
MsgBox(0, 0, _ArrayCompare($array1, $array2))
_ArrayDisplay($array1, "")
Func _ArrayCompare(ByRef $array1, ByRef $array2)
        ;返回值   
        ;        成功:1-两数组相等;2-两数组维数下标不同;3-两数组不等
        ;        失败返回0并设置@error:2-两个数组维度不同,3-两数组有且有一个不是数组
        If IsArray($array1) And IsArray($array1) Then
                Local $aArray1 = $array1
                Local $aArray2 = $array2
                If UBound($aArray1, 0) <> UBound($aArray2, 0) Then
                        Return SetError(2, 0, 0);如果两个数组的维度不相等
                Else ;如果维度相等
                        If UBound($aArray1, 0) = 1 Then ;如果数组的维度为1,即1维数组
                                For $i = 0 To UBound($aArray1) - 1
                                        $Sign = _ArraySearch($aArray2, $aArray1[$i])
                                        If Not @error Then
                                                $aArray1[$i] = ""
                                                $aArray2[$Sign] = ""
                                        ElseIf @error = 6 Then ;如果没找到,说明两数组不相等
                                                Return 2
                                                ExitLoop
                                        EndIf
                                Next
                                If UBound($aArray1) <> UBound($aArray2) Then
                                        Return 2
                                Else
                                        If _ArrayToString($aArray1, "") = _ArrayToString($aArray2, "") Then
                                                Return 1
                                        Else
                                                Return 3
                                        EndIf
                                EndIf
                        EndIf
                EndIf
        Else
                Return SetError(3, 0, 0);两个数组中存在一个或者两个不是数组
        EndIf
EndFunc   ;==>_ArrayCompare
页: [1]
查看完整版本: 求一个函数是比较两个数组内容是否相同(支持2维数组)