Kolejna ściągawka składniowa.
Zadeklarowanie tablicy:
NazwaZmiennej = {}
Zadeklarowanie tablicy z początkowymi danymi:
NazwaZmiennej = {"tekst 1", 3, InnaTablica= {"pole w innej tablicy","drugie pole w innej tablicy"},"kolejny napis w glownej tablicy"}
Push:
a = {} table.insert(a,"jakiś tekst")
Pop:
table.remove(a,1)
Ile elementów ma tablica?
print(table.getn{10,2,4}) -- 3 print(table.getn{10,2,nil}) -- 2 print(table.getn{10,2,nil; n=3}) -- 3 print(table.getn{n=1000}) -- 1000 a = {} print(table.getn(a)) -- 0 table.setn(a, 10000) print(table.getn(a)) -- 10000 a = {n=10} print(table.getn(a)) -- 10 table.setn(a, 10000) print(table.getn(a)) -- 10000
inną opcją jest użycie operatora #. Ma on jednak jedną wadę! Nie liczy, tylko wyświetla wartość najwyższego indeksu:
t = {"a", "b", "c"} = #t 3
Pętla po parach w tablicy:
t = {"a", "b", [123]="foo", "c", name="bar", "d", "e"} for k,v in pairs(t) do print(k,v) end 1 a 2 b 3 c 4 d 5 e 123 foo name bar
można też wykorzystać ipairs. Gwarantuje to, że zawsze otrzymamy rekordy w poprawnej kolejności. To rozwiązanie wyświetla jednak tabelę tylko po indeksach, nie po kluczach.
t = {"a", "b", "c"} for i, v in ipairs(t) do print(i, v) end 1 a 2 b 3 c
Funkcja do wyświetlania zawartości tablic w postaci zrozumiałej dla ludzi (implementacja print_r z php):
function print_r ( t ) local print_r_cache={} local function sub_print_r(t,indent) if (print_r_cache[tostring(t)]) then print(indent.."*"..tostring(t)) else print_r_cache[tostring(t)]=true if (type(t)=="table") then for pos,val in pairs(t) do if (type(val)=="table") then print(indent.."["..pos.."] = "..tostring(t).." {") sub_print_r(val,indent..string.rep(" ",string.len(pos)+8)) print(indent..string.rep(" ",string.len(pos)+6).."}") elseif (type(val)=="string") then print(indent.."["..pos..'] = "'..val..'"') else print(indent.."["..pos.."] = "..tostring(val)) end end else print(indent..tostring(t)) end end end if (type(t)=="table") then print(tostring(t).." {") sub_print_r(t," ") print("}") else sub_print_r(t," ") end print() end
inne podejście do problemu:
function inspect(obj) if obj==nil then return "nil" end if obj==true then return "true" end if obj==false then return "false" end if type(obj)=="string" then return obj end local json = require "json" return json.encode({obj}) end function debug(obj) print(inspect(obj)) end
Oba rozwiązania znalezione na: http://developer.coronalabs.com/code/printr-implementation-dumps-everything-human-readable-text