Lua - Tabele
Wprowadzenie
Tabele to jedyna struktura danych dostępna w Lua, która pomaga nam tworzyć różne typy, takie jak tablice i słowniki. Lua używa tablic asocjacyjnych, które mogą być indeksowane nie tylko liczbami, ale także łańcuchami znaków z wyjątkiem nil. Tabele nie mają ustalonego rozmiaru i mogą rosnąć w zależności od naszych potrzeb.
Lua używa tabel we wszystkich reprezentacjach, w tym reprezentacjach pakietów. Kiedy uzyskujemy dostęp do metody string.format, oznacza to, że uzyskujemy dostęp do funkcji formatu dostępnej w pakiecie string.
Reprezentacja i użytkowanie
Tabele nazywane są obiektami i nie są wartościami ani zmiennymi. Lua używa wyrażenia konstruktora {} do tworzenia pustej tabeli. Należy wiedzieć, że nie ma stałego związku między zmienną, która zawiera odniesienie do tabeli, a samą tabelą.
--sample table initialization
mytable = {}
--simple table value assignment
mytable[1]= "Lua"
--removing reference
mytable = nil
-- lua garbage collection will take care of releasing memory
Kiedy mamy stół a ze zbiorem elementów i jeśli go przypiszemy b, obie a i bodnoszą się do tej samej pamięci. Żadna osobna pamięć nie jest przydzielana oddzielnie dla b. Gdy a jest ustawione na zero, tabela będzie nadal dostępna dla b. Kiedy nie ma odniesienia do tabeli, wtedy czyszczenie pamięci w Lua zajmuje się czyszczeniem, aby ta pamięć bez odwołań mogła być ponownie wykorzystana.
Poniżej przedstawiono przykład wyjaśniający wspomniane wyżej cechy tabel.
-- 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)
Po uruchomieniu powyższego programu otrzymamy następujące dane wyjściowe -
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
Manipulacja tabelą
Istnieją wbudowane funkcje do manipulacji tabelami i są one wymienione w poniższej tabeli.
Sr.No. | Metoda i cel |
---|---|
1 | table.concat (table [, sep [, i [, j]]]) Łączy ciągi w tabelach na podstawie podanych parametrów. Zobacz przykład po szczegóły. |
2 | table.insert (table, [pos,] value) Wstawia wartość do tabeli w określonej pozycji. |
3 | table.maxn (table) Zwraca największy indeks liczbowy. |
4 | table.remove (table [, pos]) Usuwa wartość z tabeli. |
5 | table.sort (table [, comp]) Sortuje tabelę na podstawie opcjonalnego argumentu komparatora. |
Zobaczmy kilka przykładów powyższych funkcji.
Konkatenacja tabel
Możemy użyć funkcji concat, aby połączyć dwie tabele, jak pokazano poniżej -
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))
Po uruchomieniu powyższego programu otrzymamy następujące dane wyjściowe -
Concatenated string bananaorangeapple
Concatenated string banana, orange, apple
Concatenated string orange, apple
Wstaw i usuń
Wstawianie i wyjmowanie elementów w tabelach jest najczęściej stosowane podczas manipulacji tabelami. Jest to wyjaśnione poniżej.
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])
Po uruchomieniu powyższego programu otrzymamy następujące dane wyjściowe -
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
Sortowanie tabel
Często wymagamy sortowania tabeli w określonej kolejności. Funkcje sortowania sortują elementy w tabeli alfabetycznie. Przykład tego pokazano poniżej.
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
Po uruchomieniu powyższego programu otrzymamy następujące dane wyjściowe -
1 banana
2 orange
3 apple
4 grapes
sorted table
1 apple
2 banana
3 grapes
4 orange