Массивы в 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 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 по умолчанию:
Пример
for i= 0, 2 do
print(array[i])
end
Результат выполнения приведённого выше кода:
nil Lua Tutorial
Как видите, мы можем использовать целочисленные индексы для доступа к элементам массива. Если указанный индекс не имеет значения, он возвращаетnil。
Кроме того, мы также можем использовать отрицательные числа в качестве значений индекса массива:
Пример
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 и помогает экономить пространство памяти.
Другие расширения