本文對從資料結構,儲存和使用三個角度對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...