lua之table的使用

2021-10-07 11:29:03 字數 2321 閱讀 5591

本文對從資料結構,儲存和使用三個角度對lua之table的使用進行小結。

資料結構:

table是lua的一種資料結構,可以用來存放各種型別的元素,例如可以建立陣列和字典,以及二者混合的資料結構,

例如:a= --陣列

b= --字典

c= --陣列元素和字典元素混合

儲存:lua的table使用陣列和雜湊表結合的方式,使用string或者0和負數做key時,key都是儲存在雜湊段,使用正整數或沒有key值的值,都儲存在陣列區

如果以正整數作為key儲存的key,與索引重複,則以索引的值為準

例如對於如下定義的table

輸出如下:

遍歷方式:

table的遍歷方式有兩種,由於table的資料結構比較靈活,所以其遍歷方式也存在差別,下面從兩種遍歷方式的區別來梳理table的遍歷規則

3.1 ipairs只會輸出有索引的資料,table不會給鍵值對乙個索引,因此不會輸出鍵值對,而pairs會輸出table中的值和鍵值對,先順序輸出值,再亂序(鍵的雜湊值)輸出鍵值對。這是因為,table在儲存值的時候是在陣列區按照順序的,但是在儲存鍵值對的時候是按照鍵的雜湊值儲存的,並不會按照鍵的字母順序或是數字順序儲存

例如對於如下定義的table,兩種遍歷方式的輸出分別如下:

local a=

ipairs方式:

輸出:

pairs方式:

輸出:

3.2 ipairs遇到nil停止,pairs遇到nil繼續

例如對於如下定義的table

local a=

ipairs方式:

輸出:

pairs方式:

輸出:

3.3 以正整數作為key值定義的元素,key可以作為索引,將值儲存在陣列區,ipairs會根據key的數值從1開始加1遞增遍歷對應的table[i]值,直到出現第乙個不是按1遞增的數值時候退出;此時用pairs遍歷鍵值時,依然是亂序輸出,並不會按照索引順序輸出,而是與key的雜湊值有關係,如1中所講table在儲存值的時候是按照順序的,但是在儲存鍵值對的時候是按照鍵的雜湊值儲存的,並不會按照鍵的字母順序或是數字順序儲存

例如對於如下定義的table

local a=

ipairs方式:

輸出:pairs方式:

輸出:lua中table和json的轉換

在lua中編寫的伺服器中,客戶端傳送的資料往往是json格式,那麼在lua中就需要轉換成lua自己的資料結構進行解析,如table。同樣在如果lua希望通過json來傳送一些業務資料,則同樣需要將table轉化為json格式。

cjson可以實現table和json的轉換,使用方式如下

–引入cjson模組

local cjson = require(「cjson」)

local cjson=cjson.new()

–將lua中的table型別的資料轉換為json格式

table_data=

post_data=cjson.encode(table _data)

–post_data=

–將json格式的資料轉換為lua的table

table _data= cjson.decode(post_data)

– table _data=

Lua 之table的測試

1.字串作為table索引 法1.mytable 法2.mytable 法3.mytable mytable.x xixi 法4.mytable mytable x xixi 注 當使用數字字串作為索引的時候 如 10 法1 錯誤 mytable 法2 mytable 法3 錯誤 mytable m...

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

Lua學習筆記之table

零散知識點記錄 table的拷貝是淺拷貝,若要深拷貝a b則需要遍歷b中的元素,並將其一一對應賦值給a。乙個table剛初始化時,是沒有metatable的,必須通過setmetatable給table賦予metatable,table才有metatable。所以若想直接用table 來初始化乙個t...