找回密码
 加入
搜索
查看: 2561|回复: 7

[AU3基础] 如何快速找到两个一维数组中的某个不同元素?[已解决]

  [复制链接]
发表于 2010-12-26 06:20:08 | 显示全部楼层 |阅读模式
本帖最后由 happytc 于 2011-1-13 08:26 编辑

数组B比数组A多一个元素,别的元素两个数组完全相同,但多出的这个元素在数组B中的位置不定,如(两个数组中都没有重复元素):
$A[4] = ["a", "b", "c", "d"]
$B[5] = ["a", "b", "e", "c", "d"]

如何快速得到这个不同元素在数组B中的位置?

我的方法比较土,是:
$Flag = 0
For $i = 1 To 5
        For $j = 1 To 4
                If StringCompare($B[$i], $A[$j]) = 0 Then ExitLoop
                $Flag = $i
        Next
        If $Flag <> 0 Then ExitLoop
Next
得到的$Flag就是那个不同元素在B数组中的位置了,总觉得还有更好的方法,那个老大给出个更有效率的方法来,让我等仰望!
发表于 2010-12-26 08:12:04 | 显示全部楼层
帮顶。。。。。。
发表于 2010-12-26 12:48:43 | 显示全部楼层
未考虑数组中有重复数据的情况。慎用
Local $A[4] = ["a", "b", "c", "d"]
Local $B[5] = ["a", "b", "e", "c", "d"]
Local $time=TimerInit()

MsgBox(0,TimerDiff($time),_arraycomp($A,$B))

Func _arraycomp($Array1,$Array2)
        Local $temp,$result
        If UBound($Array1)=UBound($Array2) Then 
                Return 1
        ElseIf UBound($Array1)>UBound($Array2) Then
                $temp=$Array1
                $array1=$Array2
                $array2=$temp
        EndIf
        
        For $i=0 To UBound($array1)-1
                If Not IsDeclared($array1[$i]) Then Assign($array1[$i],$i)
        Next
                
        For $i=0 To UBound($array2)-1
                If Not IsDeclared($array2[$i]) Then 
                        $result&=$array2[$i]&"|"&$i&@CRLF
                EndIf
        Next
        Return $result
EndFunc
发表于 2010-12-26 15:15:19 | 显示全部楼层
本帖最后由 _ddqs. 于 2010-12-26 16:21 编辑
Local $A[4] = ["a", "b", "c", "d"]
Local $B[5] = ["a", "b", "e", "c", "d"]
Local $Flag = ""

For $i = 0 To UBound($B)-1
        $Flag = $B[$i]
        For $j = 0 To UBound($A)-1        
                If $A[$j] = $B[$i] Then
                        $Flag = ""
                        ExitLoop
                EndIf
        Next
        If $Flag <> "" Then 
                $Flag = $i+1
                ConsoleWrite("数组B的元素: "& $B[$i] &" 在数组中的位置为: "& $Flag  &" 索引为: "& $i  &@LF)
                ExitLoop
        EndIf
Next
发表于 2010-12-26 17:06:46 | 显示全部楼层
;如何找到两个一维数组中的不同元素并查询其位置
#include<array.au3>

Global $A[4] = ["a", "b", "c", "d"]
Global $B[7] = ["a", "b", "e", "c", "d", "g", "f"]
Global $C[1] ;用于寄存 A B 的不同元素

Global $idx = 0
For $i = 0 To UBound($B)-1
         
        $sSearch = $B[$i]
        For $j = 0 To UBound($A)-1        
                If $A[$j] = $B[$i] Then
                        $sSearch = ""
                        ExitLoop
                EndIf
        Next
        If $sSearch <> "" Then 
                        ReDim $C[$idx + 1]
                        $C[$idx] = $sSearch
                        $idx += 1
                EndIf
                
Next

_ArrayDisplay($C, "A B 数组的不同元素") ;显示 A B 的不同元素

;查询不同元素 在 B 的索引
For $i = 0 To UBound($C)-1
        
        ConsoleWrite("数组B的元素: "& $C[$i] &" 在数组中的索引为: "& _getArrayIdx($B, $C[$i])  &@LF)
        
Next

Func _getArrayIdx($avArray, $sSearch)
        
        Local $iIndex = _ArraySearch($avArray, $sSearch, 0, 0, 0, 1)
        Return $iIndex

EndFunc
发表于 2010-12-27 09:12:14 | 显示全部楼层
楼上正解哈。。
 楼主| 发表于 2010-12-27 23:05:18 | 显示全部楼层
未考虑数组中有重复数据的情况。慎用
3mile 发表于 2010-12-26 12:48


没有看懂下面干什么用的?
For $i=0 To UBound($array1)-1
                If Not IsDeclared($array1[$i]) Then Assign($array1[$i],$i)
Next
这里怎么用上了IsDeclared()函数了?明明是数组值传递,应该都没有声明呀,怎么得到只有"c","d"两个没有声明,而"a", "b"怎会声明了?当然,这里没有看明白,后面的也就不明白了,老大解释一下
 楼主| 发表于 2010-12-27 23:07:56 | 显示全部楼层
_ddqs. 发表于 2010-12-26 17:06

呵,不错,比我的好点:直接用两个元素是否相等来判断,不用象我那样还多用个函数StringCompare(), 这样也许效率要高点
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-2 18:27 , Processed in 0.075328 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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