Раздел: CronosPRO Дата редакции: 11.07.2013 id статьи: 1532

Работа с массивами в Lua

Массив — это таблица, ключами которой являются целые положительные числа. Чтобы создать массив, достаточно перечислить в фигурных скобках значения его элементов:

t = {"красный", "зеленый", "синий"}
Это выражение эквивалентно следующему коду:
t = {[1]="красный", [2]="зеленый", [3]="синий"}

Обратите внимание

  • В Lua массивы индексируются, начиная с 1 (а не с 0, как в некоторых языках программирования).
Оператор получения длины #, применённый к массиву, возвращает его максимальный индекс (или размер):
t = {"красный", "зеленый", "синий"}
n = #t -- n равно 3 
В примере ниже приведён ряд типичных для Lua синтаксических конструкций (идиом), основанных на использовании оператора #:
a = t[#t] -- присвоим переменной a значение последнего элемента массива t
t[#t] = nil -- удалим последний элемент массива t
t[#t+1] = a -- добавим значение переменной a в конец массива t

Обратите внимание

  • При работе с массивами следует учитывать важную особенность оператора #. Этот оператор рассматривает любой неинициализированный (имеющий значение nil) элемент массива как признак конца массива. Поэтому, например, для таблицы:

    t = {[1]="first", [3]="third"} -- элемент с индексом 2 отсутствует (t[2]==nil)

    оператор получения длины вернёт 1, а не 2 или 3. Таким образом, для корректной работы оператора # необходимо, чтобы массив не содержал «пустых» элементов.

  • Если таблица не содержит целочисленных ключей (либо элемент с индексом 1 равен nil), оператор # возвращает 0:

    t = {red="красный", green="зеленый", blue="синий"}
    n = #t -- n равно 0
    t = {[2]="красный", [3]="зеленый", [4]="синий"} 
    n = #t -- n равно 0 (поскольку t[1] имеет значение nil)