Lua - tablice
Tablice to uporządkowane rozmieszczenie obiektów, które może być jednowymiarową tablicą zawierającą zbiór wierszy lub wielowymiarową tablicą zawierającą wiele wierszy i kolumn.
W Lua tablice są implementowane przy użyciu indeksowania tabel z liczbami całkowitymi. Rozmiar tablicy nie jest ustalony i może rosnąć w zależności od naszych wymagań, z zastrzeżeniem ograniczeń pamięci.
Tablica jednowymiarowa
Jednowymiarowa tablica może być reprezentowana przy użyciu prostej struktury tabeli i może być inicjowana i odczytywana przy użyciu prostego pliku forpętla. Przykład jest pokazany poniżej.
array = {"Lua", "Tutorial"}
for i = 0, 2 do
print(array[i])
end
Kiedy uruchomimy powyższy kod, otrzymamy następujące dane wyjściowe.
nil
Lua
Tutorial
Jak widać w powyższym kodzie, gdy próbujemy uzyskać dostęp do elementu w indeksie, którego nie ma w tablicy, zwraca on nil. W Lua indeksowanie zwykle zaczyna się od indeksu 1. Ale możliwe jest również tworzenie obiektów o indeksie 0 i poniżej 0. Tablica używająca indeksów ujemnych jest pokazana poniżej, gdzie inicjalizujemy tablicę za pomocą pętli for .
array = {}
for i= -2, 2 do
array[i] = i *2
end
for i = -2,2 do
print(array[i])
end
Kiedy uruchomimy powyższy kod, otrzymamy następujące dane wyjściowe.
-4
-2
0
2
4
Tablica wielowymiarowa
Tablice wielowymiarowe można zaimplementować na dwa sposoby.
- Tablica tablic
- Jednowymiarowa tablica poprzez manipulowanie indeksami
Przykład wielowymiarowej tablicy 3,3 pokazano poniżej przy użyciu tablicy tablic.
-- Initializing the array
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
end
-- Accessing the array
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
Kiedy uruchomimy powyższy kod, otrzymamy następujące dane wyjściowe.
1
2
3
2
4
6
3
6
9
Przykład tablicy wielowymiarowej jest pokazany poniżej przy użyciu manipulacji indeksami.
-- Initializing the array
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
for col=1,maxColumns do
array[row*maxColumns +col] = row*col
end
end
-- Accessing the array
for row=1,maxRows do
for col=1,maxColumns do
print(array[row*maxColumns +col])
end
end
Kiedy uruchomimy powyższy kod, otrzymamy następujące dane wyjściowe.
1
2
3
2
4
6
3
6
9
Jak widać na powyższym przykładzie, dane są przechowywane w oparciu o indeksy. Możliwe jest rzadkie umieszczanie elementów i tak właśnie działa implementacja macierzy w Lua. Ponieważ nie przechowuje wartości zerowych w Lua, możliwe jest zaoszczędzenie dużej ilości pamięci bez żadnej specjalnej techniki w Lua w porównaniu ze specjalnymi technikami używanymi w innych językach programowania.