找回密码
 加入
搜索
查看: 4389|回复: 6

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

  [复制链接]
发表于 2010-7-5 21:38:23 | 显示全部楼层 |阅读模式
如题,比如我有两个数组,如果想比较两个数组是否相同(维度,内容比较)该如何写,请高手给条思路.
发表于 2010-7-5 22:16:17 | 显示全部楼层
相同维度、内容是否相同,是这样比较吗?
发表于 2010-7-5 22:49:06 | 显示全部楼层
#include <array.au3>
Dim $avArray[5] = [1, 2, 3, 4, 5], $anArray[5] = ["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

评分

参与人数 2金钱 +40 收起 理由
afan + 20
水木子 + 20 学习啦!

查看全部评分

发表于 2010-7-6 09:35:21 | 显示全部楼层
用gdi矩阵套过来不知道行不行
 楼主| 发表于 2010-7-6 09:39:38 | 显示全部楼层
回复 3# 3mile


    谢谢你的代码,但是好像_ArrayToString这个只是相对一维数组而已吧,对于二维数组可就....
发表于 2010-7-6 10:17:53 | 显示全部楼层
增加一个判断,If ubound($arr1,0)>1 OR ubound($arr2,0)>1 then msgbox(0,"","多维数组")
 楼主| 发表于 2010-7-6 23:41:12 | 显示全部楼层
回复 6# 3mile


   我的代码跟你的有点不同,不知道这样做可不可以,,无论循序怎么样都好像可以判断,就是没有办法想出二维的如下:
#include <Array.au3>
Local $array1[4] = ["3", "1", "2",""]
Local $array2[3] = ["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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 16:38 , Processed in 0.091560 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表