lua中的table不是一種簡單的資料結構,它可以作為其他資料結構的基礎,如:陣列,記錄,鍊錶,佇列等都可以用它來表示。
1、陣列
在lua中,table的索引可以有很多種表示方式。如果用整數來表示table的索引,即可用table來實現陣列,在lua中索引通常都會從1開始。
--二維陣列
n=10 m=10
arr={}
for i=1,n do
arr[i]={}
for j=1,m do
arr[i][j]=i*j
endend
for i=1, n do
for j=1, m do
if(j~=m) then io.write(arr[i][j].." ")
else print(arr[i][j])
endend
end2、鍊錶
在lua中,由於table是動態的實體,所以用來表示鍊錶是很方便的,其中每個節點都用table來表示。
list = nil
for i = 1, 10 do
list =
endlocal l = list
while l do
print(l.value)
l = l.next
end3、佇列與雙端佇列
在lua中實現佇列的簡單方法是呼叫table中insert和remove函式,但是如果資料量較大的話,效率還是很慢的,下面是手動實現,效率快許多。
list={}
function list.new()
return
endfunction list.pushfront(list,value)
list.first=list.first-1
list[ list.first ]=value
endfunction list.pushback(list,value)
list.last=list.last+1
list[ list.last ]=value
endfunction list.popfront(list)
local first=list.first
if first>list.last then error("list is empty!")
endlocal value =list[first]
list[first]=nil
list.first=first+1
return value
endfunction list.popback(list)
local last=list.last
if lastlp=list.new()
list.pushfront(lp,1)
list.pushfront(lp,2)
list.pushback(lp,-1)
list.pushback(lp,-2)
x=list.popfront(lp)
print(x)
x=list.popback(lp)
print(x)
x=list.popfront(lp)
print(x)
x=list.popback(lp)
print(x)
x=list.popback(lp)
print(x)
--輸出結果
-- 2
-- -2
-- 1
-- -1
-- lua:... list is empty!
4、集合和包
在lua中用table實現集合是非常簡單的,見如下**:
reserved =
if not reserved["while"] then
--do something
end在lua中我們可以將包(bag)看成multiset,與普通集合不同的是該容器中允許key相同的元素在容器中多次出現。下面的**通過為table中的元素新增計數器的方式來模擬實現該資料結構,如:
function insert(bag,element)
bag[element]=(bag[element] or 0)+1
end
function remove(bag,element)
local count=bag[element]
if count >0 then bag[element]=count-1
else bag[element]=nil
endend
5、stringbuild
如果在lua中將一系列字串連線成大字串的話,有下面的方法:
低效率:
local buff=""
for line in io.lines() do
buff=buff..line.."\n"
end高效率:
local t={}
for line in io.lines() do
if(line==nil) then break end
t[#t+1]=line
endlocal s=table.concat(t,"\n") --將table t 中的字串連線起來
Lua繼承(使用table實現)
lua本身是不能像c 那樣直接實現繼承,我們可以用萬能的table表來實現。廢話不多說,直接上 父類 people.lua people people.name 人 people.age 18 預設18歲 function people speak str print self.name self....
lua之table的使用
本文對從資料結構,儲存和使用三個角度對lua之table的使用進行小結。資料結構 table是lua的一種資料結構,可以用來存放各種型別的元素,例如可以建立陣列和字典,以及二者混合的資料結構,例如 a 陣列 b 字典 c 陣列元素和字典元素混合 儲存 lua的table使用陣列和雜湊表結合的方式,使...
lua使用table問題
今天在開發的時候,自己建立了乙個table。建立 如下 self.skill value table self.skill table for i 1,8 do self.skill table i self.skill value table end這樣每次去改變self.skill table ...