arr := Array("b", "a", "c") ; create an array with 3 items arr[2] := "a - new" ; change 2nd item arr[1] := "bac" ; change 1st item arr.append("new", "items") ; add 2 more items arr.insert(2, "xyz") ; insert "xyz" before the 2nd item ("a - new") Msgbox, % arr.join("`n") ; join the array and show it in a msgbox Msgbox, % arr.append("z").sort().reverse().join("`n") ; append another item, sort, reverse, join Loop, % arr.len() Msgbox, % arr[A_Index]
Example 2:
files := Array() Loop, %A_WinDir%\* files.append(A_LoopFileName) Msgbox, % files.sort().join("`n")Example 3:
text = Recommended for performance and compatibility with future AutoHotkey releases. StringSplit, textarr, text ; create an ahk array of characters textarr := Array().extend("textarr") ; create an ahk_l array and extend it with the ahk array Msgbox, % textarr.reverse().join("")
Array.ahk:
; Array Lib - temp01 - http://www.autohotkey.com/forum/viewtopic.php?t=49736 Array(p1="……", p2="……", p3="……", p4="……", p5="……", p6="……"){ static ArrBase If !ArrBase ArrBase := Object("len", "Array_Length", "indexOf", "Array_indexOf", "join", "Array_Join" , "append", "Array_Append", "insert", "Array_Insert", "delete", "Array_Delete" , "sort", "Array_sort", "reverse", "Array_Reverse", "unique", "Array_Unique" , "extend", "Array_Extend", "copy", "Array_Copy", "pop", "Array_Pop") arr := Object("base", ArrBase) While (_:=p%A_Index%)!="……" && A_Index<=6 arr[A_Index] := _ Return arr } Array_indexOf(arr, val, opts="", startpos=1){ P := !!InStr(opts, "P"), C := !!InStr(opts, "C") If A := !!InStr(opts, "A") matches := Array() Loop % arr.len() If(A_Index>=startpos) If(match := InStr(arr[A_Index], val, C)) and (P or StrLen(arr[A_Index])=StrLen(val)) If A matches.append(A_Index) Else Return A_Index If A Return matches Else Return 0 } Array_Join(arr, sep="`n"){ Loop, % arr.len() str .= arr[A_Index] sep StringTrimRight, str, str, % StrLen(sep) return str } Array_Copy(arr){ Return Array().extend(arr) } Array_Append(arr, p1="……", p2="……", p3="……", p4="……", p5="……", p6="……"){ Return arr.insert(arr.len()+1, p1, p2, p3, p4, p5, p6) } Array_Insert(arr, index, p1="……", p2="……", p3="……", p4="……", p5="……", p6="……"){ While (_:=p%A_Index%)!="……" && A_Index<=6 arr._Insert(index + (A_Index-1), _) Return arr } Array_Reverse(arr){ arr2 := Array() Loop, % len:=arr.len() arr2[len-(A_Index-1)] := arr[A_Index] Return arr2 } Array_Sort(arr, func="Array_CompareFunc"){ n := arr.len(), swapped := true while swapped { swapped := false Loop, % n-1 { i := A_Index if %func%(arr[i], arr[i+1], 1) > 0 ; standard ahk syntax for sort callout functions arr.insert(i, arr[i+1]).delete(i+2), swapped := true } n-- } Return arr } Array_Unique(arr, func="Array_CompareFunc"){ ; by infogulch i := 0 while ++i < arr.len(), j := i + 1 while j <= arr.len() if !%func%(arr[i], arr[j], i-j) arr.delete(j) ; j comes after else j++ ; only increment to next element if not removing the current one Return arr } Array_CompareFunc(a, b, c){ return a > b ? 1 : a = b ? 0 : -1 } Array_Extend(arr, p1="……", p2="……", p3="……", p4="……", p5="……", p6="……"){ While (_:=p%A_Index%)!="……" && A_Index<=6 If IsObject(_) Loop, % _.len() arr.append(_[A_Index]) Else Loop, % %_%0 arr.append(%_%%A_Index%) Return arr } Array_Pop(arr){ Return arr.delete(arr.len()) } Array_Delete(arr, p1="……", p2="……", p3="……", p4="……", p5="……", p6="……"){ While (_:=p%A_Index%)!="……" && A_Index<=6 arr._Remove(_) Return arr } Array_Length(arr){ len := arr._MaxIndex() Return len="" ? 0 : len }
Original post