Как построить динамический массив и выполнить цикл через него в AutoIt?


Я читал официальные параметры массива AutoIt, и из того, что я могу сказать, Вы должны сказать AutoIt, сколько элементов имеет Ваш массив, прежде чем вы даже сможете его создать. Поскольку мой массив будет динамическим в соответствии с тем, что пользователь выбирает в моем интерфейсе, то мне нужно что-то вроде этого.

С их страницы:

Но предположим, что вы не знаете размер массива заранее, потому что он может иметь переменный размер при динамическом создании.
Local $iMax

Local $data="Element 1|Element 2|Element 3"

; The string in data will be split into an array everywhere | is encountered
Local $arr = StringSplit($data, "|")

If IsArray($arr) Then
     $iMax = UBound($arr); get array size

     ConsoleWrite("Items in the array: " & $iMax & @LF)

     For $i = 0 to $iMax - 1; subtract 1 from size to prevent an out of bounds error
     ConsoleWrite($arr[$i] & @LF)
     Next
EndIf

Я установил оператор if, чтобы пройти через выбор пользователей и сначала построить массив:

If GUICtrlRead($Box1) = $GUI_CHECKED Then
   $data = "one|two|three"
EndIf
If GUICtrlRead($Box2) = $GUI_CHECKED Then
   $data = "four|five|six"
EndIf
If GUICtrlRead($Box3) = $GUI_CHECKED Then
   $data = "seven|eight|nine"
EndIf

Если пользователь выбрал все три поля, мне понадобится что-то вроде:

$data = one|two|three|four|five|six|seven|eight|nine

Тогда на этом этапе я могу передать эти элементы в вышеприведенный пример, чтобы перебрать все мои элементы.

Как я могу построить массив с помощью нескольких операторов if и получить один большой массив?

1 2

1 ответ:

Вы можете использовать функцию UDF_ArrayAdd для этой цели. Например,

#include <Array.au3>
Local $arr = []      ; NOTE this creates an array of size 1 with an empty string
_ArrayAdd($arr, 'lorem')
_ArrayAdd($arr, 'ipsum')

For $i = 1 To UBound($arr) - 1
    ConsoleWrite('arr[' & $i & '] == ' & $arr[$i] & @CRLF)
Next

Или вы можете использовать класс .NET ArrayList. Это более гибко:

Local $arr = ObjCreate('System.Collections.ArrayList')
$arr.Add('lorem')
$arr.Add('ipsum')
$arr.Add('dolor')

ConsoleWrite("Contains 'dolor'? " & $arr.Contains('dolor') & @CRLF)

$arr.Sort()
For $i = 0 To $arr.Count - 1
    ConsoleWrite('arr[' & $i & '] == ' & $arr.Item($i) & @CRLF)
Next