Массивы — это упорядоченное расположение объектов, которое может быть одномерным массивом, содержащим набор строк, или многомерным массивом, содержащим несколько строк и столбцов.
В Lua массивы реализованы с использованием таблиц индексации с целыми числами. Размер массива не фиксирован, и он может увеличиваться в зависимости от наших требований с учетом ограничений памяти.
Одномерный массив
Одномерный массив может быть представлен с использованием простой структуры таблицы и может быть инициализирован и считан с использованием простого цикла for . Пример показан ниже.
array = {"Lua", "Tutorial"} for i = 0, 2 do print(array[i]) end
Когда мы запустим приведенный выше код, мы получим следующий вывод.
nil Lua Tutorial
Как видно из приведенного выше кода, когда мы пытаемся получить доступ к элементу в индексе, которого нет в массиве, он возвращает nil. В Lua индексация обычно начинается с индекса 1. Но возможно также создавать объекты с индексом 0 и ниже 0. Массив с использованием отрицательных индексов показан ниже, где мы инициализируем массив с помощью цикла for .
array = {} for i= -2, 2 do array[i] = i *2 end for i = -2,2 do print(array[i]) end
Когда мы запустим приведенный выше код, мы получим следующий вывод.
-4 -2 0 2 4
Многомерный массив
Многомерные массивы могут быть реализованы двумя способами.
- Массив массивов
- Одномерный массив путем манипулирования индексами
Пример для многомерного массива 3. 3 показан ниже с использованием массива массивов.
-- Initializing the array array = {} for i=1,3 do array[i] = {} for j=1,3 do array[i][j] = i*j end end -- Accessing the array for i=1,3 do for j=1,3 do print(array[i][j]) end end
Когда мы запустим приведенный выше код, мы получим следующий вывод.
1 2 3 2 4 6 3 6 9
Пример многомерного массива показан ниже с использованием манипулирования индексами.
-- Initializing the array array = {} maxRows = 3 maxColumns = 3 for row=1,maxRows do for col=1,maxColumns do array[row*maxColumns +col] = row*col end end -- Accessing the array for row=1,maxRows do for col=1,maxColumns do print(array[row*maxColumns +col]) end end
Когда мы запустим приведенный выше код, мы получим следующий вывод.
1 2 3 2 4 6 3 6 9
Как видно из приведенного выше примера, данные хранятся на основе индексов. Можно размещать элементы разреженным образом, и именно так работает реализация матрицы в Lua. Поскольку он не хранит нулевые значения в Lua, можно сэкономить много памяти без каких-либо специальных приемов в Lua по сравнению со специальными приемами, используемыми в других языках программирования.