Lua - Массивы
Массивы - это упорядоченное расположение объектов, которое может быть одномерным массивом, содержащим набор строк, или многомерным массивом, содержащим несколько строк и столбцов.
В 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 по сравнению со специальными методами, используемыми в других языках программирования.