通過整數下標訪問的table中的元素,即是陣列,下標預設從1開始。
乙個建立二維陣列的例子:
mt ={}for i = 1, 10
domt[i] ={}
for j = 1, 10
domt[i][j] = 0
endend
list = nillist =
list =
local l =list
while l do
(l.value)
l = l.next
end
queue ={}類似於python的set結構,例如:function
queue.new()
return
endfunction
queue.push(q, val)
local last = q.last + 1
q.last =last
q[last] =val
endfunction
queue.pop(q)
local first =q.first
if first > q.last then
error("
queue is empty")
endlocal val =q[first]
q[first] = nil
q.first = q.first + 1
return
valend
q =queue.new()
for i=1,10,2
doqueue.push(q, i)
endfor i=q.first,q.last do
(queue.pop(q))
end
function假如需要讀取乙個檔案的內容,常用的方式如下:set(list)
local s ={}
for _, n in
ipairs(list) do
s[n] = true
endreturn
send
reserved = set
reserved.beijing
--true
reserved.shanghai --
nil
local buff = ""假設每行有20 bytes,已讀了2500行,那麼buff現在就是50000b,當lua做字串連線時,就新建乙個50020b的新字串,並從buff中複製了50000b到這個新字串。這樣,對於後面的每一行,lua都需要移動更多的記憶體,顯然,這樣做效率是比較低的。for line in
io.lines() do
buff = buff .. line .. "\n"
endprint(buff)
下面是乙個改進的版本,利用table做緩衝,最後利用table.concat將所有行連線起來:
local t ={}那麼問題來了,concat的內部工作原理是什麼呢,它在連線字串的時候如何做到高效執行呢?for line in
io.lines() do
t[#t+1] =line
endlocal s = table.concat(t, '
\n')
將每次需要連線的字串壓入堆疊,如果新加入的字串比棧頂字串更大,就將兩者連線。然後,再將連線後的新字串與更下面的字串比較,如果是新建字串更長的話,則再次連線它們。這樣的連線一直向下延續應用,直到遇到乙個更大的字串或者達到了棧底。
function下面是乙個廣度優先遍歷有向圖的例子,其中raw描述了圖的所有邊,每個邊有兩個點——起點、終點。newstack()
return
endfunction
push(stack, s)
table.insert
(stack, s)
for i = table.getn(stack) - 1, 1, -1
doif
string.len(stack[i]) > string.len(stack[i+1]) then
break
endstack[i] = stack[i] .. table.remove
(stack)
endend
local s =newstack()
for line in
io.lines() do
push(s, line .. "\n
")end
用了乙個table來表示點,它有兩個字段,name和adj,name表示該點的名稱,adj表示它的終點。
列印乙個lua物件:
function輸出內容:serialize(o)
iftype(o) == "
number
"then
io.write
(o)
elseif
type(o) == "
string
"then
io.write(string.format("%q"
, o))
elseif
type(o) == "
table
"then
io.write("\n"
)
else
error("
cannot serialize a
" .. type
(o))
endend
local l = }
serialize(l)
,}
Lua資料結構
1.簡介 lua語言只有一種基本資料結構,那就是table,所有其他資料結構如陣列啦,類啦,都可以由table實現.2.table的下標 例e05.lua arrays mydata mydata 0 foo mydata 1 42 hash tables mydata bar baz iterat...
Lua資料結構。
方法一 local function dotest array for i 1,4 do array i for j 1,4 do array i j 12 end end for i 1,4 dofor j 1,4 do print array i j endend end 方法二 local f...
lua資料結構
1.說明 k v資料結構,k非nil的任意型別 2.賦值local tab 初始化 key 預設 local tab 訪問 tab 1 key 數字 local tab 訪問 tab 60 key 字串 local tab 訪問 tab.aa 1.方法一 local tab 1.增table.ins...