Предисловие: это совсем не столы, а тэйблы. Данная статья будет полезна скриптерам известной игры MTA:SA.

В конце статьи вы поймёте к чему картинка из фильма «Матрица». Ну а сейчас вернёмся ко всем известному понятию Lua скриптеров — Tables.
Для тех кто не знает, что такое Tables. Table (или как правильнее называть массив) — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу или набору индексов.
Известно, что в Lua нет примитивных типов. Все знакомы лишь со String, Boolean, nil и Number. Именно эти типы могут содержать массивы. Да, можно меня исправить и сказать: «Как же ты забыл тот случай, когда мы в таблицу ложим ElementData?». Конечно, и ElementData мы можем помещать в массив, но сама ElementData — это и есть один из приведенных мною типов.
Как же работать с массивами?
Начнём разбирать код.
Пример 1. Создание пустого массива и его заполнение.
luaTable = {} -- simple table empty
luaTable[1]= "LUA VALUE" --simple table value assignment
Всё просто. Дополню, что нумерация элементов массива — с единицы, а не с нуля как многие привыкли!
Теперь сложнее — встроенные Lua функции для массивов.
Пример 2. table.concat — объединение элементов массива.
local luaValue = {"1","2","3","4","5","6"} -- просто
outputChatBox(table.concat(luaValue))
-- output : 123456
local luaValue = {"1","2","3","4","5","6"} -- объединение с использованием разделителя
outputChatBox(table.concat(luaValue,", "))
-- output : 1,2,3,4,5,6
local luaValue = {"1","2","3","4","5","6"} -- объединение на основе индексов
outputChatBox(table.concat(luaValue,", ", 2,3))
-- output : 2,3
Пример 3. table.insert — вставляет значение в массив по указанной позиции.
local luaValue = {"Yellow","Blue","Red"}
table.insert(luaValue,"Green") -- вставляет «Green» четвёртым элементом в массив
-- результат : luaValue = {"Yellow","Blue","Red","Green"}
outputChatBox("Last color added "..luaValue[4]) -- Green
table.insert(luaValue,2,"Black") -- вставляет вторым элементом значение «Black», «Blue» — уже третий элемент, а не второй
outputChatBox("Color at index 2 is "..luaValue[2]) -- Black
Пример 4. table.remove — удаление элемента из массива.
table.remove(luaValue) -- удалили «Green» из прошлого примера
outputChatBox("The previous last element is "..luaValue[5]) -- nil
Что же вернёт luaValue[6], luaValue[7], …, luaValueL[1000] и так далее? Если массив не имеет значений по заданному индексу — он вернёт nil.
Пример 5. table.sort — сортировка элементов массива с использованием компаратора.
local luaValue = {"Yellow","Blue","Red","Green"} -- здесь понятно
table.sort(luaValue)
for k,v in ipairs(luaValue) do -- выводим циклом
outputChatBox("Index: "..k..", Value:"..v)
end
--[[ Result
Index: 1, Value: Blue
Index: 2, Value: Green
Index: 3, Value: Red
Index: 4, Value: Yellow ]]--
Видим, что элементы отсортированы в алфавитном порядке.
Второй вид сортировки — с использованием функции (того самого компоратора).
local widgets = {
{ id = 246, num1 = 90885, val2 = "NA" },
{ id = 250, num1 = 95689, val2 = "NA" },
{ id = 257, num1 = 95694, val2 = "NA" } -- не забываем убирать запятую в конце! Будьте аккуратны в написании своего кода
}
-- сортируем по значению num1
table.sort(widgets, function(a,b) return a.num1 < b.num1 end)
for i, widget in ipairs(widgets) do
outputChatBox(widget.num1)
end
Обратите внимание на этот массив. Какой он? Ответ в конце статьи.
Пример 6. table.maxn — возвращает наибольший индекс в массиве. Данная функция устарела. Не путаем её с #table — длиной массива. Из прошлого примера:
local length = #widgets
outputChatBox(length) -- 2
Пример 7. unpack — распаковывает массив (возвращает все его элементы).
Данная функция эквивалентна:
return list[i], list[i+1], ···, list[j]
То есть она сокращает запись, если аргументы (к примеру у функции) находятся в массиве:
local coords = {123, 321, 231}
setElementPosition(element, unpack(coords))
-- то же самое, что
setElementPosition(element, coords[1], coords[2], coords[3])
Вывод
Как оказалось, массивы — вовсе не сложная штука. Теперь про картинку из начала статьи. В примере 5 я попросил вас обратить внимание на массив. Он многомерный (в данном случае двойной). То есть мы имеем дело с массивами, которые в массиве.

Что же у нас получилось? А получилась у нас как раз таблица 3х3, или как ещё можно назвать — матрица.
Всем спасибо! Надеюсь, вам было интересно!