Lua - Таблицы
Введение
Таблицы - единственная структура данных, доступная в Lua, которая помогает нам создавать различные типы, такие как массивы и словари. Lua использует ассоциативные массивы, которые можно индексировать не только числами, но и строками, кроме nil. Таблицы не имеют фиксированного размера и могут увеличиваться по мере необходимости.
Lua использует таблицы во всех представлениях, включая представление пакетов. Когда мы обращаемся к методу string.format, это означает, что мы обращаемся к функции форматирования, доступной в строковом пакете.
Представление и использование
Таблицы называются объектами, и они не являются ни значениями, ни переменными. 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("alternatetable 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
alternatetable 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 (table, [pos,] value) Вставляет значение в таблицу в указанной позиции. | 
| 3 | table.maxn (table) Возвращает наибольший числовой индекс. | 
| 4 | table.remove (table [, pos]) Удаляет значение из таблицы. | 
| 5 | 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Когда мы запустим вышеуказанную программу, мы получим следующий результат -
1	banana
2	orange
3	apple
4	grapes
sorted table
1	apple
2	banana
3	grapes
4	orange