2014-05-22 4 views
3

나는 공식 AutoIt Array Parameters을 읽었으며, AutoIt에 배열에 얼마나 많은 요소가 있는지 알려야 만 알 수있다. 내 배열은 사용자가 내 인터페이스에서 선택하는 것에 따라 동적이 될 것이므로이 같은 것을 필요로합니다.어떻게 동적 배열을 만들고 AutoIt에서 루프를 반복합니까?

자신의 페이지에서

:

을하지만 동적으로 생성 할 때 변수의 크기가 올 수 있기 때문에 당신이 선행 배열의 크기를 모르는 말한다.

$data = one|two|three|four|five|six|seven|eight|nine 
: 사용자가 내가 좋아하는 뭔가를 필요로하는 모든 세 개의 상자를 선택한 경우

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 

을 :

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 문을 사용하여 빌드하고 하나의 큰 배열로 만들 수 있습니까?

+0

'$ data & = "one | two | three"를 사용하여 알아 냈으므로 연결 할당이 함께 추가됩니다. https://www.autoitscript.com/autoit3/docs/intro/lang_operators.htm. 그런 다음 필자는 필요한 'For $ i = 0 to $ iMax - 1' 루프를 실행하여 필요한 결과를 얻었습니다. –

+0

또한 10000 개의 항목을 말하고 원하는 크기로 Redim을 사용하여 배열을 만들 수도 있습니다. – Xenobiologist

+1

Array.au3 UDF 예를 사용하십시오. _ArrayAdd – Milos

답변

2

이 목적으로 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 
관련 문제