Lua中使用table實現的其它5種資料結構

2021-07-29 14:49:23 字數 2662 閱讀 1585

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 ...