Axiom Справочник языка

10 · Массивы

Двумерные массивы

Таблицу, у которой каждая строка имеет одинаковый набор столбцов, удобно хранить как двумерный массив: элемент выбирается парой индексов, а сами измерения читаются как строки и столбцы.

Объявление и его части

Двумерный массив вводится оператором DIM с двумя парами границ. Форма с пустыми местами объявляет ранг без выделения элементов, третья запись присваивает значение одному элементу таблицы.

DIM <имя массива>[<первая нижняя граница> TO <первая верхняя граница>, <вторая нижняя граница> TO <вторая верхняя граница>] AS <тип элемента>
DIM <имя массива>[,] AS <тип элемента>
<имя массива>[<первый индекс>, <второй индекс>] = <значение>

Имя массива обозначает таблицу, а две пары границ задают независимые диапазоны первого и второго измерения. Первый и второй индексы являются числовыми выражениями; значение должно быть совместимо с типом элемента.

Границы задаются числовыми выражениями. Допустимы INTEGER, LONG, DOUBLE и DECIMAL, но значение должно быть целым и помещаться в INTEGER. Ненулевая дробная часть вызывает MB3007; усечения нет. Нижняя граница -2147483648 запрещена, потому что поисковые функции используют нижнюю границу минус 1 как признак отсутствия. Верхняя граница включается в массив. Обратный диапазон допустим только как каноническая пустая форма 1 TO 0 при DIM или REDIM.

Прямоугольная форма и доступ

Двумерный массив прямоугольный: у каждой строки один и тот же диапазон столбцов. Номер измерения можно записывать именем: ROW равно 1, COLUMN равно 2, поэтому LBOUND(board, ROW) получает нижнюю границу строк, а UBOUND(board, COLUMN) — верхнюю границу столбцов.

DIM с границами создаёт элементы со значениями по умолчанию. DIM с пустыми измерениями сохраняет тип и ранг без выделения элементов. Полное индексирование возвращает один элемент; частичное индексирование создаёт представление оставшихся измерений. Работа с массивом разрешена на верхнем уровне, в процедуре и в функции; SCREEN не требуется.

Обе границы могут быть отрицательными и не обязаны начинаться с нуля или единицы:

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 7
board[0, 4] = 9
PRINT board[-1, 3]
PRINT board[0, 4]
PRINT ARRAYLENGTH(board[])

Программа выводит:

7
9
4

Два элемента получили значения, остальные сохранили значение по умолчанию. Длина массива равна четырём, потому что каждое измерение содержит по две координаты.

Схема индексов

Подписанные координаты выбирают элемент внутри включительных границ. Пустая клетка хранит значение по умолчанию до первого присваивания.

          столбец 3   столбец 4
строка -1     [7]        [0]
строка  0     [0]        [9]

Диагностика

Несовместимый тип элемента или индекса даёт MB2003, неверное число индексов — MB2004. Выход индекса или диапазона за границы при индексировании сообщается кодом MB3002, а доступ к невыделенному массиву и недопустимая пара границ — кодом MB3005. Запрещённая нижняя граница -2147483648 вызывает MB3007, выход числового значения за диапазон INTEGER — MB3008.

См. также

Массивы · Индексирование · Изменение размера