找回密码  加入

AUTOIT CN

搜索
查看: 135|回复: 5

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

[复制链接]
发表于 2018-8-8 19:52:08 | 显示全部楼层 |阅读模式
本帖最后由 heavenm 于 2018-8-8 19:54 编辑

[AppleScript] 纯文本查看 复制代码
#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']

这就对了,

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

  10. _ArrayDisplay($aArray)

  11. Func _ArrayCombinationsX($avA1, $avA2)
  12.         If Not IsArray($avA1) Or Not IsArray($avA2) Then Return SetError(1)
  13.         Local $aRe[1] = [0], $element
  14.         For $i = 0 To UBound($avA1) - 1
  15.                 For $j = 0 To UBound($avA2) - 1
  16.                         $element = $avA1[$i] & $avA2[$j]
  17.                         _ArrayAdd($aRe, $element)
  18.                 Next
  19.         Next
  20.         _ArrayDelete($aRe, 0)
  21.         Return $aRe
  22. EndFunc   ;==>_ArrayCombinationsX
复制代码

点评

眼泪掉下来,我说怎么会不对,竟然是这个地方错了,你告诉我答案我都还看了半天!  发表于 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 | 显示全部楼层
[AppleScript] 纯文本查看 复制代码
#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 | 显示全部楼层
[AppleScript] 纯文本查看 复制代码
#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-8-19 04:29 , Processed in 0.091769 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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