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 по сравнению со специальными методами, используемыми в других языках программирования.