Как построить динамический массив и выполнить цикл через него в 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 ответ:
Вы можете использовать функцию 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