3mile 发表于 2012-4-10 14:24:15

#include <Array.au3>
Global $A,$B = ,$C = ,$D
For $i = 0 To 9
      $A[$i] = $B[$i]
                $A[$i] = $C[$i]
        Next
_ArraySort($A)

Local $output=""

For $i=0 to UBound($A)-2
        If $A[$i]=$A[$i+1] Then
                If $A[$i]==$A[$i+1] Then
                        $output&=$A[$i]&"="&$A[$i+1]&@CRLF
                Else
                        $output&=$A[$i]&"<>"&$A[$i+1]&@CRLF
                EndIf
        EndIf
Next
MsgBox(0,0,$output)

netegg 发表于 2012-4-10 14:40:47

本帖最后由 netegg 于 2012-4-10 14:42 编辑

回复 16# 3mile
这恐怕不行,二维数组的第一维比较必须和第二维比较的结果同号,而且,结果要求的是第二维数组元素排序前的索引,而数组元素不是唯一值

lion.lee 发表于 2012-4-10 21:04:31

回复netegg


    这样做是不是如果两个数组长度不符,就不能遍历所有数据了?假设第一个数组短,第二 ...
nmgwddj 发表于 2012-4-10 00:50 http://www.autoitx.com/images/common/back.gif

这两个数组的维度是一样的。

user3000 发表于 2012-4-10 21:52:51

本帖最后由 user3000 于 2012-4-10 22:14 编辑

回复 18# lion.lee
试试我这个, 是个双循环!应该好理解.
大数组估计处理起来慢!
(发现些错误, 已修正)#include <Array.au3>
Global $B =
Global $C =
Global $D = '|'
Global $count = 0
For $i = 0 To UBound($B) - 1
        If Not StringInStr($D, '|' & $i & '|') Then
                Local $A =
                $count = 1
                For $ii = $i + 1 To UBound($B) - 1
                        If $B[$i] = $B[$ii] Then
                                $count += 1
                                $A = '第 ' & $i + 1 & ' 个元素: ' & $C[$i]
                                $D &= $ii & '|' ; 外循环将跳过不再检查此元素的异同!
                                If $C[$i] <> $C[$ii] Then _ArrayAdd($A, '第 ' & $ii + 1 & ' 个元素: ' & $C[$ii])
                        EndIf
                Next
                If $count <> 1 Then _ArrayDisplay($A, '发现' & $count & '个异样元素')
        EndIf
Next

lion.lee 发表于 2012-4-10 23:03:45

回复lion.lee
试试我这个, 是个双循环!应该好理解.
大数组估计处理起来慢!
(发现些错误, 已修正)
user3000 发表于 2012-4-10 21:52 http://www.autoitx.com/images/common/back.gif

兄弟:太感谢了!完全达成了我的要求,牛人啊!Thanks!

lion.lee 发表于 2012-4-10 23:24:39

回复 19# user3000
大侠:能否用_ArrayUnique($B)得到单独的每个数据,然后用_arrayfindall得到每一个数据的位置索引,再For一次得到每一个相同数据的位置号,最后用Ubound($C中刚才记录的位置号的集合),假如Ubound大于1,就表示有不同的值,则将这些值输出。我用这个思路研究了好几个小时,一直没成功。#include <Array.au3>
Global $A, $B =
Global $C =
Global $D, $e, $f, $g, $index
For $i = 0 To 9
        $A[$i] = $B[$i] & " + " & $C[$i]
Next
$D = _ArrayUnique($B)

For $j = 1 To UBound($D) - 1
        $index = _ArrayFindAll($B, $D[$j])
        For $k = 0 To UBound($index) - 1
                $e[$k] = $B[$index[$k]]
        Next
Next

user3000 发表于 2012-4-10 23:56:10

本帖最后由 user3000 于 2012-4-10 23:59 编辑

回复 21# lion.lee

只是想输出 数组B 里相同的元素吗?
勉强按你的思路来, 习惯于自己想一个
#include <Array.au3>
Global $B =
Global $C =
$D = _ArrayUnique($B)
For $j = 1 To UBound($D) - 1
        $index = _ArrayFindAll($B, $D[$j])
        If @error Then ContinueLoop
        If UBound($index) > 1 Then
                Local $elements = 'B数组元素值: ' & $B[$index] & ', 共 ' & UBound($index) & '个'
                For $k = 0 To UBound($index) - 1
                        $elements &= @CRLF & '元素索引: ' & $index[$k]
                Next
                MsgBox(0, 'B数组中相同元素', $elements)
        EndIf
Next
页: 1 [2]
查看完整版本: 【已解决】找出数组B中相同的值并记录位置,再比较数组C相应位置的值是否相同。