Вы можете задать любой вопрос по программе Autohotkey в нашей группе Вконтакте. Если решение требует более высокой квалификации- можно обратиться непосредственно ко мне.
Группа Вконтакте | Электронная почта | Симаков Яков ВК |
Массивы (arrays) - это упорядоченные наборы данных, представляющие собой список однотипных элементов.
Существует два типа массивов, различающиеся по способу идентификации элементов: простые и ассоциативные. В простых массивах элемент определяется индексом (уникальным порядковым номером). Массивы второго типа имеют ассоциативную природу, и для обращения к элементам используются ключи, логически связанные со значениями.
Для работы с массивами можно использовать две взаимозаменяемые вариации синтаксиса: традиционный и объектный. Несмотря на то, что для сохранения читабельности кода не рекомендуется их смешивать, это не приведет к ошибке интерпретатора.
Традиционный способ:
Объектный способ:
При объявлении простых массивов можно сразу внести значения в ячейки. Обратите внимание, что в Autohotkey, в отличае от большинства языков, при создании предварительно заполненного значениями массива, нумерация элементов начинается с 1.
Для перебора всех элементов массива можно использовать цикл Loop или For. Второй является более наглядным и в большинстве случаев рекомендуется использовать именно его.
Поведение Loop и For несколько отличается:
- Loop полностью игнорирует именные ячейки, т.е. Array["name"] был бы пропущен. Так же, конструкция Array.MaxIndex() выведет именно максимальный индекс ячейки. Это значит, что цикл пройдет все индексы от 1 до максимального, обходя даже несуществующие элементы.
- For же, наоборот, обходит только существующие элементы массива, при том, как с числовыми индексами, так и именные. В этом случае именные элементы выводятся после числовых.
Многомерным называется массив из массивов. Соответственно, в таком массиве каждая ячейка является объектом.
При объявлении нового элемента многомерного массива необходимо использовать исключительно конструкцию Array[i, k], в то время как для последующего обращения к элементу подойдет любая из конструкций: Array[i,k], Array[i][k], Array.i.k
По факту псевдо-массивы массивами и не являются. Это отдельные переменные, имена которых содержат "индекс". Для опхода таких массивов циклом, необходимо обязательно хранить в отдельной переменной число элементов, иначе просто невозможно узнать, сколько значений хранит псевдо-массив.
Тот же метод используется и для построения многомерных псевдо-массивов, например: Array_i_k.
По возможности старайтесь отказаться от применения псевдо-массивов. При их использовании невозможен корректный обход только существующих ячеек циклом For. Так же, может появиться рассогласование между переменной, хранящей максимальный индекс и фактическим кол-вом элементов.
Push() |
Добавляет элемент(ы) в конец массива Array.Push(Value, Value2, ..., ValueN)
Если массив был пустым или содержал только именные ключи- новый элемент будет добавлен с индексом 1. |
InsertAt() |
Вставляет одно или несколько значений в массив на выбранную позицию. Array.InsertAt(Pos, Value1 , Value2, ... ValueN)
;Пример
Array := []
Array.InsertAt(1, "A", "B") ; => ["A", "B"]
Array.InsertAt(2, "C") ; => ["A", "C", "B"]
|
RemoveAt() |
Удаляет один или несколько элементов массива с заданным интервалом. Array.RemoveAt(Pos , Length)
;Пример
Array := ["A", "B", "C", "D", "E"]
Array.RemoveAt(2, 3) ; => ["A", "E"]
;т.к. начиная с индекса 2 были удалены 3 элемента
Если Length не указана, возвращается значение, удаленное из Pos (пусто, если не удалено ничего). |
Pop() |
Удаляет последний элемент массива и возвращает его значение Array.Pop()
;Пример
Array := ["A", "B", "C"]
MsgBox, % "Удален элемент со значением " Array.Pop()
|
Delete() |
Удаляет элемент(ы) массива без смещения последующих. Array.Delete(Key)
Array.Delete(FirstKey, LastKey)
;Пример
Array := ["A", "B", "C"]
Array.Delete(2) ;удалим "B"
MsgBox, % Array[2] ;будет пустым, т.к. смещения не происходит
Если Length не указана, возвращается значение, удаленное из Pos (пусто, если не удалено ничего). |
Clone() |
Возвращает копию массива. Clone := Array.Clone()
|
MaxIndex() |
Если в массиве присутствуют целочисленные ключи- возвращает наибольший. MaxIndex := Array.MaxIndex()
|
MinIndex() |
Если в массиве присутствуют целочисленные ключи- возвращает наименьший. MinIndex := Array.MinIndex()
|
Length() |
Возвращает длину массива относительно ячейки 1. Учитывает только положительные числа, начиная от 1. Length := Array.Length()
;Пример
MsgBox % ["A", "B", "C"].Length() ;3
MsgBox % ["A", , "C"].Length() ;3
MsgBox % {-10: 0, 10: 0}.Length() ;10
MsgBox % {-10: 0, -1: 0}.Length() ;0
|
Count() |
Вернет число элементов массива, учитывая именные и с индексом меньше 1. Count := Array.Count()
;Пример
MsgBox % {A: 1, Z: 26}.Count() ;2
MsgBox % ["A", "B", "C"].Count() ;3
MsgBox % ["A", , "C"].Count() ;2
|