English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Массивы Lua

Массив - это множество элементов одного и того же типа данных,排列енных в определенном порядке, может быть одномерным или многомерным.

Индекс ключа Lua массива может быть представлен целым числом, размер массива не фиксирован.

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

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

array = {"Lua", "Tutorial"}
for i = 0, 2 do
   print(array[i])
end

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

nil
Lua
Tutorial

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

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

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

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

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

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

Вот пример многоуровневого массива с тремя строками и тремя столбцами:

-- Инициализация массива
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 и способствует экономии памяти.