Учебники

Луа — Массивы

Массивы — это упорядоченное расположение объектов, которое может быть одномерным массивом, содержащим набор строк, или многомерным массивом, содержащим несколько строк и столбцов.

В Lua массивы реализованы с использованием таблиц индексации с целыми числами. Размер массива не фиксирован, и он может увеличиваться в зависимости от наших требований с учетом ограничений памяти.

Одномерный массив

Одномерный массив может быть представлен с использованием простой структуры таблицы и может быть инициализирован и считан с использованием простого цикла for . Пример показан ниже.

Live Demo

array = {"Lua", "Tutorial"}

for i = 0, 2 do
   print(array[i])
end

Когда мы запустим приведенный выше код, мы получим следующий вывод.

nil
Lua
Tutorial

Как видно из приведенного выше кода, когда мы пытаемся получить доступ к элементу в индексе, которого нет в массиве, он возвращает nil. В Lua индексация обычно начинается с индекса 1. Но возможно также создавать объекты с индексом 0 и ниже 0. Массив с использованием отрицательных индексов показан ниже, где мы инициализируем массив с помощью цикла for .

Live Demo

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 показан ниже с использованием массива массивов.

Live Demo

-- 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

Пример многомерного массива показан ниже с использованием манипулирования индексами.

Live Demo

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