Учебники

Луа — Столы

Таблицы — единственная структура данных, доступная в 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 позаботится о том, чтобы очистить процесс, чтобы снова использовать эту нереференсную память.

Пример показан ниже для объяснения вышеупомянутых особенностей таблиц.

Live Demo

-- 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 для объединения двух таблиц, как показано ниже:

Live Demo

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

Вставить и удалить

Вставка и удаление элементов в таблицах наиболее распространена при манипулировании таблицами. Это объясняется ниже.

Live Demo

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

Таблицы сортировки

Нам часто требуется сортировать таблицу в определенном порядке. Функции сортировки сортируют элементы в таблице по алфавиту. Пример для этого показан ниже.

Live Demo

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

Когда мы запустим вышеуказанную программу, мы получим следующий вывод: