找回密码
 加入
搜索
楼主: lion.lee

[AU3基础] 【已解决】找出数组B中相同的值并记录位置,再比较数组C相应位置的值是否相同。

 火.. [复制链接]
发表于 2012-4-10 14:24:15 | 显示全部楼层
#include <Array.au3>
Global $A[10][2],$B[10] = [1,2,3,4,3,6,5,2,4,9],$C[10] = [90,270,180,0,0,90,270,180,180,0],$D
For $i = 0 To 9
        $A[$i][0] = $B[$i]
                $A[$i][1] = $C[$i]
        Next
_ArraySort($A)

Local $output=""

For $i=0 to UBound($A)-2
        If $A[$i][0]=$A[$i+1][0] Then 
                If $A[$i][1]==$A[$i+1][1] Then
                        $output&=$A[$i][1]&"="&$A[$i+1][1]&@CRLF
                Else
                        $output&=$A[$i][1]&"<>"&$A[$i+1][1]&@CRLF
                EndIf
        EndIf
Next
MsgBox(0,0,$output)
发表于 2012-4-10 14:40:47 | 显示全部楼层
本帖最后由 netegg 于 2012-4-10 14:42 编辑

回复 16# 3mile
这恐怕不行,二维数组的第一维比较必须和第二维比较的结果同号,而且,结果要求的是第二维数组元素排序前的索引,而数组元素不是唯一值
 楼主| 发表于 2012-4-10 21:04:31 | 显示全部楼层
回复  netegg


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


这两个数组的维度是一样的。
发表于 2012-4-10 21:52:51 | 显示全部楼层
本帖最后由 user3000 于 2012-4-10 22:14 编辑

回复 18# lion.lee
试试我这个, 是个双循环!  应该好理解.
大数组估计处理起来慢!
(发现些错误, 已修正)
#include <Array.au3>
Global $B[10] = [1, 2, 3, 4, 3, 6, 3, 2, 4, 2]
Global $C[10] = [90, 270, 180, 0, 0, 90, 270, 180, 180, 0]
Global $D = '|'
Global $count = 0
For $i = 0 To UBound($B) - 1
        If Not StringInStr($D, '|' & $i & '|') Then
                Local $A[1] = [0]
                $count = 1
                For $ii = $i + 1 To UBound($B) - 1
                        If $B[$i] = $B[$ii] Then
                                $count += 1
                                $A[0] = '第 ' & $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

评分

参与人数 1金钱 +30 贡献 +5 收起 理由
lixiaolong + 30 + 5 恭喜金牌会员~

查看全部评分

 楼主| 发表于 2012-4-10 23:03:45 | 显示全部楼层
回复  lion.lee
试试我这个, 是个双循环!  应该好理解.
大数组估计处理起来慢!
(发现些错误, 已修正)
user3000 发表于 2012-4-10 21:52


兄弟:太感谢了!完全达成了我的要求,牛人啊!Thanks!
 楼主| 发表于 2012-4-10 23:24:39 | 显示全部楼层
回复 19# user3000
大侠:能否用_ArrayUnique($B)得到单独的每个数据,然后用_arrayfindall得到每一个数据的位置索引,再For一次得到每一个相同数据的位置号,最后用Ubound($C中刚才记录的位置号的集合),假如Ubound大于1,就表示有不同的值,则将这些值输出。我用这个思路研究了好几个小时,一直没成功。
#include <Array.au3>
Global $A[10], $B[10] = [1, 2, 3, 4, 3, 3, 3, 2, 4, 2]
Global $C[10] = [90, 270, 180, 0, 0, 90, 270, 180, 180, 0]
Global $D[10], $e[10], $f[10], $g[10], $index[10]
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
发表于 2012-4-10 23:56:10 | 显示全部楼层
本帖最后由 user3000 于 2012-4-10 23:59 编辑

回复 21# lion.lee

只是想输出 数组B 里相同的元素吗?
勉强按你的思路来, 习惯于自己想一个
#include <Array.au3>
Global $B[10] = [1, 2, 3, 4, 3, 3, 3, 2, 4, 2]
Global $C[10] = [90, 270, 180, 0, 0, 90, 270, 180, 180, 0]
$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[0]] & ', 共 ' & UBound($index) & '个'
                For $k = 0 To UBound($index) - 1
                        $elements &= @CRLF & '元素索引: ' & $index[$k]
                Next
                MsgBox(0, 'B数组中相同元素', $elements)
        EndIf
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-18 09:54 , Processed in 0.079357 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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