找回密码  加入

AUTOIT CN

搜索
查看: 257|回复: 5

[效率算法] 求助数组依次分别组合

[复制链接]
发表于 2018-8-8 19:52:08 | 显示全部楼层 |阅读模式
#include <Array.au3>
Dim $a[2]=['a','b']
Dim $b[4]=[1,2,3,4]
Dim $c[3]=['!','@','#']
_ArrayDisplay($a)
发表于 2018-8-8 21:09:20 | 显示全部楼层
heavenm 发表于 2018-8-8 20:04
[mw_shl_code=applescript,true]#include
;首输入
Dim $aVarA[4] = ['a', 'b', 'c']

这就对了,

[au3]#include <array.au3>
;首输入
Dim $aVarA[3] = ['a', 'b', 'c']
Dim $aVarB[3] = [1, 2, 3]
Local $aArray = _ArrayCombinationsX($aVarA, $aVarB)
_ArrayDisplay($aArray)
;再来
Dim $aVarC[3] = ['!', '@', '#']
$aArray = _ArrayCombinationsX($aArray, $aVarC)

_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   ;==>_ArrayCombinationsX[/AU3]

点评

眼泪掉下来,我说怎么会不对,竟然是这个地方错了,你告诉我答案我都还看了半天!  发表于 2018-8-8 21:51

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-8-8 19:54:00 | 显示全部楼层
怎么组合成
a,1,!
a,1,@
a,1,#
a,2,!
1,2,@
..........
一直组合到完结
数组数量不确定,有可能$A-$Z
 楼主| 发表于 2018-8-8 20:04:18 | 显示全部楼层
#include <array.au3>
;首输入
Dim $aVarA[4] = ['a', 'b', 'c']
Dim $aVarB[3] = [1, 2, 3]
Local $aArray = _ArrayCombinationsX($aVarA, $aVarB)
_ArrayDisplay($aArray)
;再来
Dim $aVarC[3] = ['!','@', '#']
$aArray = _ArrayCombinationsX($aArray, $aVarC)

_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

http://autoitx.com/thread-46338-2-1.html
这个好像有点像,不过最后的数据好像不太对,再研究研究
 楼主| 发表于 2018-8-9 18:14:04 | 显示全部楼层
#include <array.au3>
;首输入
Dim $aVarA[3] = ['a', 'b', 'c']
Dim $aVarB[3] = [1, 2, 3]
Dim $aVarC[3] = ['!', '@', '#']
Dim $aVarD[3] = ['$', '%', '^']
Dim $aVarE[3] = ['&', '*', '(']
Dim $arrar[5] = [$aVarA, $aVarB, $aVarC, $aVarD, $aVarE]
$count = UBound($arrar)

Select
        Case $count == 1
                $combinations = $arrar[0]
        Case $count == 2
                $combinations = _ArrayCombinationsX($arrar[0], $arrar[1])
        Case $count >= 3
                $combinations = _ArrayCombinationsX($arrar[0], $arrar[1])
                For $i = 2 To $count - 1
                        $combinations = _ArrayCombinationsX($combinations, $arrar[$i])
                Next
EndSelect
_ArrayDisplay($combinations)


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   ;==>_ArrayCombinationsX


N组数组组合
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2018-10-18 01:20 , Processed in 0.088209 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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