배열
연관 배열 [v1.0.90+]
Object()를 호출하면 자기 충족적 연관 배열을 생성할 수 있습니다. 예를 들어:
; 배열을 생성합니다. 최초는 비어 있습니다: Array := Object() ; 배열에 씁니다: Loop, Read, C:\Guest List.txt ; 이 회돌이는 파일로부터 각 줄을 한 번에 하나씩 열람합니다. { Array.Insert(A_LoopReadLine) ; 이 줄을 배열에 추가합니다. } ; 배열로부터 읽습니다: ; Loop % Array.MaxIndex() ; 좀 전통적인 접근법. for index, element in Array ; 대부분의 경우 권장하는 접근법. { ; "Loop"를 사용하면, 인덱스는 1 부터 배열의 원소의 개수까지. ; 연속적인 숫자가 되어야 합니다 (또는 회돌이 안에서 계산되어야 합니다). ; MsgBox % "Element number " . A_Index . " is " . Array[A_Index] ; "for"를 사용하면, 인덱스 (또는 "키")와 그에 연관된 값이 제공됩니다 ; 그리고 인덱스는 선택에 따라 *어떤 값이든* 될 수 있습니다. MsgBox % "Element number " . index . " is " . element }
이 정도는 객체가 제공하는 기능의 일부만 보여줄 뿐입니다 . 항목을 설정, 열람, 삽입, 제거 그리고 열거할 수 있습니다. 문자열과 객체는 숫자와 더불어 키로 사용할 수 있습니다. 객체는 값으로 다른 객체에 저장하고 함수의 매개변수 또는 반환 값으로 건넬 수 있습니다. 객체는 또 새로운 기능으로 확장할 수 있습니다.
Insert()와 열거자는 각자 자신의 사용법이 있지만, 어떤 사용자는 전통적인 접근법을 더 쉽게 생각합니다:
; 각 배열은 사용하기 전에 초기화해야 합니다: Array := Object() ; Array%j% := A_LoopField Array[j] := A_LoopField ; Array%j%_%k% := A_LoopReadLine Array[j, k] := A_LoopReadLine ArrayCount := 0 Loop, Read, C:\Guest List.txt { ArrayCount += 1 ; Array%ArrayCount% := A_LoopReadLine Array[ArrayCount] := A_LoopReadLine } Loop %ArrayCount% { ; element := Array%A_Index% element := Array[A_Index] ; MsgBox % "Element number " . A_Index . " is " . Array%A_Index% MsgBox % "Element number " . A_Index . " is " . Array[A_Index] }
ArrayCount는 편의를 위해 변수로 남겨 두었지만, 배열 자체에 Array.Count := n
로 저장하거나 아니면 제거하고 그 자리에 Array._MaxIndex()
를 사용해도 됩니다. 시작 위치를 1 말고 다른 것으로 하고 싶다면, Array._MinIndex()
를 사용할 수 있습니다.
의사-배열
의사 배열은 대단히 개념적입니다: 각 배열은 실제로 그저 연속적으로 번호가 붙은, 그리고 각각 배열의 원소로 인지되는 변수나 함수 집단에 불과합니다. 오토핫키는 이 원소들을 어떤 식으로든 하나로 연결하지 않습니다.
StringSplit과 "WinGet List"같은 배열-생성 명령어 말고도, OutputVar를 받는 명령어나 값을 변수에 할당하는 명령어라면 무엇이든 배열을 생성하는데 사용할 수 있습니다. 가장 간단한 예는 아래에 보여주는 바와 같이 할당 연산자 (:=)입니다:
Array%j% := A_LoopField
다차원 배열은 선택한 가름 문자를 인덱스 사이에 사용하면 가능합니다. 예를 들어:
Array%j%_%k% := A_LoopReadLine
다음 예제는 배열을 만들고 접근하는 법을 보여줍니다. 이 경우 배열은 텍스트로부터 열람한 일련의 이름입니다:
; 배열에 쓰기: ArrayCount = 0 Loop, Read, C:\Guest List.txt ; 이 회돌이는 파일로부터 한 번에 하나씩 각 줄을 열람합니다. { ArrayCount += 1 ; 배열에 얼마나 많은 항목이 있는 추적 관리합니다. Array%ArrayCount% := A_LoopReadLine ; 이 줄을 다음 배열 원소에 저장합니다. } ; 배열로부터 읽습니다: Loop %ArrayCount% { ; 다음 줄은 := 연산자를 사용하여 배열 원소를 열람합니다: element := Array%A_Index% ; A_Index는 내장 변수입니다. ; 다른 방법으로, "% " 접두사를 사용하여 MsgBox나 기타 다른 명령어를 표현식으로 만듭니다: MsgBox % "Element number " . A_Index . " is " . Array%A_Index% }
배열에 관련된 개념은 NumPut()과 NumGet()을 사용해 이진 형태의 숫자 집단을 저장하고 열람하는 것입니다. 이것은 수행성능과 메모리 보전이 중요한 경우에 도움이 될 수 있습니다.