Таблицы — единственная структура данных, доступная в Lua, которая помогает нам создавать различные типы, такие как массивы и словари. Lua использует ассоциативные массивы, которые можно индексировать не только числами, но и строками, кроме nil. Таблицы не имеют фиксированного размера и могут расти в зависимости от наших потребностей.
Lua использует таблицы во всех представлениях, включая представление пакетов. Когда мы обращаемся к методу string.format, это означает, что мы обращаемся к функции форматирования, доступной в пакете string.
Представление и использование
Таблицы называются объектами и не являются ни значениями, ни переменными. Lua использует выражение конструктора {} для создания пустой таблицы. Должно быть известно, что не существует фиксированной связи между переменной, которая содержит ссылку на таблицу, и самой таблицей.
--sample table initialization mytable = {} --simple table value assignment mytable[1]= "Lua" --removing reference mytable = nil -- lua garbage collection will take care of releasing memory
Когда у нас есть таблица a с набором элементов и если мы присваиваем ее b , и a, и b ссылаются на одну и ту же память. Отдельная память не выделяется отдельно для b. Когда для a установлено значение nil, таблица все еще будет доступна для b. Когда нет ссылки на таблицу, сборщик мусора в Lua позаботится о том, чтобы очистить процесс, чтобы снова использовать эту нереференсную память.
Пример показан ниже для объяснения вышеупомянутых особенностей таблиц.
-- Simple empty table mytable = {} print("Type of mytable is ",type(mytable)) mytable[1]= "Lua" mytable["wow"] = "Tutorial" print("mytable Element at index 1 is ", mytable[1]) print("mytable Element at index wow is ", mytable["wow"]) -- alternatetable and mytable refers to same table alternatetable = mytable print("alternatetable Element at index 1 is ", alternatetable[1]) print("mytable Element at index wow is ", alternatetable["wow"]) alternatetable["wow"] = "I changed it" print("mytable Element at index wow is ", mytable["wow"]) -- only variable released and and not table alternatetable = nil print("alternatetable is ", alternatetable) -- mytable is still accessible print("mytable Element at index wow is ", mytable["wow"]) mytable = nil print("mytable is ", mytable)
Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
Type of mytable is table mytable Element at index 1 is Lua mytable Element at index wow is Tutorial alternatetable Element at index 1 is Lua mytable Element at index wow is Tutorial mytable Element at index wow is I changed it alternatetable is nil mytable Element at index wow is I changed it mytable is nil
Таблица Манипуляция
Есть встроенные функции для работы с таблицами, и они перечислены в следующей таблице.
Sr.No. | Метод и цель |
---|---|
1 |
table.concat (table [, sep [, i [, j]]]) Объединяет строки в таблицах на основе заданных параметров. Смотрите пример для деталей. |
2 |
table.insert (таблица, [pos,] значение) Вставляет значение в таблицу в указанной позиции. |
3 |
table.maxn (таблица) Возвращает самый большой числовой индекс. |
4 |
table.remove (таблица [, pos]) Удаляет значение из таблицы. |
5 |
table.sort (table [, comp]) Сортирует таблицу на основе необязательного аргумента компаратора. |
table.concat (table [, sep [, i [, j]]])
Объединяет строки в таблицах на основе заданных параметров. Смотрите пример для деталей.
table.insert (таблица, [pos,] значение)
Вставляет значение в таблицу в указанной позиции.
table.maxn (таблица)
Возвращает самый большой числовой индекс.
table.remove (таблица [, pos])
Удаляет значение из таблицы.
table.sort (table [, comp])
Сортирует таблицу на основе необязательного аргумента компаратора.
Давайте посмотрим на некоторые примеры вышеуказанных функций.
Конкатенация таблиц
Мы можем использовать функцию concat для объединения двух таблиц, как показано ниже:
fruits = {"banana","orange","apple"} -- returns concatenated string of table print("Concatenated string ",table.concat(fruits)) --concatenate with a character print("Concatenated string ",table.concat(fruits,", ")) --concatenate fruits based on index print("Concatenated string ",table.concat(fruits,", ", 2,3))
Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
Concatenated string bananaorangeapple Concatenated string banana, orange, apple Concatenated string orange, apple
Вставить и удалить
Вставка и удаление элементов в таблицах наиболее распространена при манипулировании таблицами. Это объясняется ниже.
fruits = {"banana","orange","apple"} -- insert a fruit at the end table.insert(fruits,"mango") print("Fruit at index 4 is ",fruits[4]) --insert fruit at index 2 table.insert(fruits,2,"grapes") print("Fruit at index 2 is ",fruits[2]) print("The maximum elements in table is",table.maxn(fruits)) print("The last element is",fruits[5]) table.remove(fruits) print("The previous last element is",fruits[5])
Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —
Fruit at index 4 is mango Fruit at index 2 is grapes The maximum elements in table is 5 The last element is mango The previous last element is nil
Таблицы сортировки
Нам часто требуется сортировать таблицу в определенном порядке. Функции сортировки сортируют элементы в таблице по алфавиту. Пример для этого показан ниже.
fruits = {"banana","orange","apple","grapes"} for k,v in ipairs(fruits) do print(k,v) end table.sort(fruits) print("sorted table") for k,v in ipairs(fruits) do print(k,v) end
Когда мы запустим вышеуказанную программу, мы получим следующий вывод: