找回密码
 加入
搜索
楼主: au3x

[AU3基础] 数组元素 组合[已解决]

 火.. [复制链接]
发表于 2014-12-9 22:22:03 | 显示全部楼层
回复 14# afan
afan也开始卖萌了
发表于 2014-12-10 08:23:47 | 显示全部楼层
当我看到4个for的的时候,眼睛就花了....
 楼主| 发表于 2014-12-10 10:47:24 | 显示全部楼层
"遍历"是可以实现类似功能啦,但是我的数据是动态录入的,如果用这种"遍历"方法的话,就得先预算可能出现的最大数组个数,预写好这么多for,好像不太好吧。
发表于 2014-12-10 20:13:26 | 显示全部楼层
回复 18# au3x

既然是动态输入,数组太多的话大可以分批次进行组合的.
在输入首两个数组后进行第一次组合,以后每输入完一个数组在原基础上又进行下一步组合.
#include <array.au3>
;首输入
Dim $aVarA[4] = [5, 6, 7, 'a']
Dim $aVarB[3] = [1, 2, 3]
Local $aArray = _ArrayCombinationsX($aVarA, $aVarB)
_ArrayDisplay($aArray)
;再来
Dim $aVarC[3] = [9, 8, 7]
$aArray = _ArrayCombinationsX($aArray, $aVarC)
;又来
Dim $aVard[6] = [9, 8, 7, 'b', 'c', 'd']
$aArray = _ArrayCombinationsX($aArray, $aVard)
_ArrayDisplay($aArray)


Func _ArrayCombinationsX($avA1, $avA2)
        If Not IsArray($avA1) Or Not IsArray($avA2) Then Return SetError(1)
        Local $aRe[1] = [0], $element
        For $i = 0 To UBound($avA1) - 1
                For $j = 0 To UBound($avA2) - 1
                        $element = $avA1[$i] & $avA2[$j]
                        _ArrayAdd($aRe, $element)
                Next
        Next
        _ArrayDelete($aRe, 0)
        Return $aRe
EndFunc
发表于 2014-12-11 10:11:06 | 显示全部楼层
#include <array.au3>
Dim $varA = [1, 2]
Dim $varB = [4, 5]
Dim $varC = [7, 8]
$var1 = $varA
 _ArrayConcatenate($varA, $varB)
_ArrayConcatenate($varA, $varc)

$ss = _ArrayCombinations($varA, 3, "")
_ArrayDisplay($ss)
蛋蛋的方法可行,得出结果后再删除相同的数组就可以了~
发表于 2014-12-11 10:23:39 | 显示全部楼层
学习,感谢分享!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-23 18:27 , Processed in 0.065052 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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