如何快速找到两个一维数组中的某个不同元素?[已解决]
本帖最后由 happytc 于 2011-1-13 08:26 编辑数组B比数组A多一个元素,别的元素两个数组完全相同,但多出的这个元素在数组B中的位置不定,如(两个数组中都没有重复元素):
$A = ["a", "b", "c", "d"]
$B = ["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数组中的位置了,总觉得还有更好的方法,那个老大给出个更有效率的方法来,让我等仰望! 帮顶。。。。。。 未考虑数组中有重复数据的情况。慎用
Local $A = ["a", "b", "c", "d"]
Local $B = ["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 本帖最后由 _ddqs. 于 2010-12-26 16:21 编辑
Local $A = ["a", "b", "c", "d"]
Local $B = ["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
;如何找到两个一维数组中的不同元素并查询其位置
#include<array.au3>
Global $A = ["a", "b", "c", "d"]
Global $B = ["a", "b", "e", "c", "d", "g", "f"]
Global $C ;用于寄存 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
楼上正解哈。。 未考虑数组中有重复数据的情况。慎用
3mile 发表于 2010-12-26 12:48 http://autoitx.com/images/common/back.gif
没有看懂下面干什么用的?
For $i=0 To UBound($array1)-1
If Not IsDeclared($array1[$i]) Then Assign($array1[$i],$i)
Next
这里怎么用上了IsDeclared()函数了?明明是数组值传递,应该都没有声明呀,怎么得到只有"c","d"两个没有声明,而"a", "b"怎会声明了?当然,这里没有看明白,后面的也就不明白了,老大解释一下
_ddqs. 发表于 2010-12-26 17:06 http://autoitx.com/images/common/back.gif
呵,不错,比我的好点:直接用两个元素是否相等来判断,不用象我那样还多用个函数StringCompare(), 这样也许效率要高点
页:
[1]