Lua資料之表

2021-09-23 14:27:50 字數 1698 閱讀 5413

表( table )是lua 裡唯一的資料結構, 可以近似地理解為其他程式語言裡的字典、關聯陣列或者key - value 對映,但lua的表更加靈活,能夠模擬出array 、list 、dict 、set, map 等常見資料結構,或者其他任意複雜的結構。

◆ 定義表

lua 裡定義表使用花括號「{}」。

local a =   --宣告乙個陣列形式的表

local a = --宣告乙個字典形式的表

注意在使用「 key=value 」的形式時key 不需要用單引號或雙引號,如果必須要用( 例如key 裡有空格或者其他特殊符號) 則要使用「[key]=value 」 的形式。

◆ 操作表

操作表裡的元素需要使用方括號「 [] 」:

assert(a[1] == 3 and a[2] == 5)  --使用訪問陣列裡的元素,整數key

a[1] = 100 --修改第乙個元素的值

assert(d['one']) == 1) --使用[]訪問字典裡的元素,字串key

d['three']) = 3 --新增乙個新元素

如果key 是字串我們也可以直接使用點號「 . 」來操作, 這時表就可以模擬其他語言裡的類或名字空間特性,儲存成員變數或成員函式。

x. job = 'hunter'    --使用「.」訪問表裡的元素,字串key

x.mission = function(dst) --為表新增乙個函式變數,相當於成員函式

print('fly to', dst)

endx.mission('zebes') -- 執行成員函式

運算子「#」可以計算形式表裡的陣列元素數量,配合for 迴圈可以實現遍歷陣列。對於字典形式的表,暫時沒有辦法能夠直接獲取元素的數量,使用「#」會返回0。

assert(#a == 3)

for i=1, #a do

print(a[i],』,』 )

end

◆ 範圍迴圈:

範圍迴圈主要用於遍歷表裡的元素,但需要兩個標準庫函式的配合: ipairs()和pairs() 。這兩個函式起到迭代器的作用,逐個返回表裡的key/value。

1、ipairs():

ipairs()只能遍歷陣列形式的表:

for i,v in ipairs(a) do

print(a[i],',')

end

2、pairs():

pairs()可以遍歷任意的表

for k,v in pairs(x) do

print(k,'=>', v)

end

◆ 作為函式引數:

因為表通常都很大,所以當表作為函式的引數時不是傳值的方式,而是傳引用的方式,也就是說沒有拷貝,直接傳遞表的「引用」,函式體內可以直接修改表的元素。

local function f(v)                --定義函式, 表傳遞的是引用

v . name = v.name . . 'aran' --函式內部可以直接修改表的元素

endf(x) --行函式, 表被修改

print(x.name)

Lua 基礎之元表

print getmetatable hello 003e7050 print getmetatable lua 003e7050 print getmetatable 12 nil print getmetatable nil t print getmetatable t nil setmetat...

Lua學習之元表

在 lua table 中我們可以訪問對應的key來得到value值,但是卻無法對兩個 table 進行操作。因此 lua 提供了元表 metatable 允許我們改變table的行為,lua中的每個值都可以用乙個metatable來表示,每個行為則關聯了對應的元方法。元表的處理有兩個很重要的函式 ...

Lua基礎之元表(metatable)

lua中的元表允許我們通過乙個tablea特殊的鍵值自定義另乙個tableb的行為,這些特殊的鍵值稱為元方法,tablea則稱為tableb的元表。函式 描述 index 呼叫乙個索引 newindex 給乙個索引賦值 add 運算子 sub 運算子 mul 運算子 div 運算子 mod 運算子 ...