Массивы в Lua

Массив — это совокупность элементов одного и того же типа данных, расположенных в определённом порядке; это может быть одномерный или многомерный массив.

В Lua массив не является отдельным типом данных, а представляет собой структуру данных, используемую для хранения набора значений.

На самом деле в Lua нет специального типа массива; вместо этого он использует структуру данных под названием"table"для реализации функциональности массивов.

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

В Lua значения индексов начинаются с1в качестве начальной точки, но также можно указать начало с 0.


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

Одномерный массив — это простейший тип массива, а его логическая структура представляет собой линейный список.

Доступ к элементам массива по индексам:

Пример

-- Создать массив
local myArray = {10, 20, 30, 40, 50}

-- Доступ к элементам массива
print(myArray[1])  -- Вывод 10
print(myArray[3])  -- Вывод 30

Результат выполнения приведённого выше кода:

10
30

Чтобы вычислить длину массива (т.е. количество элементов в массиве), можно использовать#оператор:

Пример

local myArray = {10, 20, 30, 40, 50}

-- Вычислить длину массива
local length = #myArray

print(length) -- Вывод 5

Результат выполнения приведённого выше кода:

5

Одномерный массив может использоватьforцикл для перебора элементов массива, как в следующем примере:

Пример

-- Создать массив
local myArray = {10, 20, 30, 40, 50}

-- Цикл по массиву
for i = 1, #myArray do
    print(myArray[i])
end

Результат выполнения приведённого выше кода:

10
20
30
40
50

Индексы в Lua начинаются с 1 по умолчанию:

Пример

array = {"Lua", "Tutorial"}

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

Результат выполнения приведённого выше кода:

nil
Lua
Tutorial

Как видите, мы можем использовать целочисленные индексы для доступа к элементам массива. Если указанный индекс не имеет значения, он возвращаетnil。

Кроме того, мы также можем использовать отрицательные числа в качестве значений индекса массива:

Пример

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

Мы также можем изменять элементы в массиве:

Пример

-- Создать массив
local myArray = {10, 20, 30, 40, 50}

-- Изменить элементы массива
myArray[2] = 25

-- Цикл по массиву
for i = 1, #myArray do
    print(myArray[i])
end

Результат выполнения приведённого выше кода:

10
25
30
40
50

Мы также можем добавлять элементы в массив:

Пример

-- Создать массив
local myArray = {10, 20, 30, 40, 50}

-- Добавить новый элемент в конец массива
myArray[#myArray + 1] = 60


-- Цикл по массиву
for i = 1, #myArray do
    print(myArray[i])
end

Результат выполнения приведённого выше кода:

10
20
30
40
50
60

Мы также можем удалять элементы из массива:

Пример

-- Создать массив
local myArray = {10, 20, 30, 40, 50}

-- Удалить третий элемент
table.remove(myArray, 3)

-- Цикл по массиву
for i = 1, #myArray do
    print(myArray[i])
end

Результат выполнения приведённого выше кода:

10
20
40
50

Многомерный массив

Многомерный массив — это массив, содержащий массивы, или массив, в котором индексный ключ одномерного массива соответствует массиву.

Ниже представлен многомерный массив с тремя строками и тремя столбцами:

Пример

-- Инициализация массива
array = {}
for i=1,3 do
   array[i] = {}
      for j=1,3 do
         array[i][j] = i*j
      end
end

-- Доступ к массиву
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

Многомерный массив с тремя строками и тремя столбцами с использованием разных индексных ключей:

Пример

-- Инициализация массива
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
   for col=1,maxColumns do
      array[row*maxColumns +col] = row*col
   end
end

-- Доступ к массиву
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

Как видите, в приведённых выше примерах в массиве заданы значения индексов, что позволяет избежать значений nil и помогает экономить пространство памяти.

Другие расширения