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

Обход элементов таблицы в Lua

Для обхода всех элементов таблицы обычно используют расширенную форму оператора for совместно со стандартной функцией pairs.
t = { name = "Евгений",
      surname = "Степанов",
      age = 12
    }
for key, val in pairs(t) do
   MsgBox(key.." : "..val)
end
На каждом шаге цикла переменная key получает ключ очередного поля таблицы t, а переменная val — соответствующее ключу значение поля. Цикл выполняется по всем полям таблицы.
Для обхода массива, то есть таблицы с целочисленными ключами, удобнее использовать другую стандартную функцию Lua — ipairs.
t = { "Иванов", "Степанов", "Петров" }
for i, val in ipairs(t) do
   MsgBox("№"..i.." : "..val)
end
На каждом шаге цикла переменная i получает числовой индекс очередного поля таблицы t, а переменная val — соответствующее индексу значение поля. Цикл продолжается до первого целого ключа, отсутствующего в таблице.

Примечание

  • При обходе массива необходимость в получении индекса зачастую отсутствует. В этом случае переменную i можно не вводить, заменив её символом подчеркивания (_).

    t = { "Иванов", "Степанов", "Петров" }
    for _, val in ipairs(t) do
       MsgBox(val)
    end
Обойти массив можно и с помощью обычного числового for.
t = { "Иванов", "Степанов", "Петров" }
for i = 1, #t do
   MsgBox("Значение элемента №"..i.." : "..t[i])
end