table
table(表)是Lua中一種基礎且使用頻率極高的數據結構,他的本質是“關聯數組”!
根據內部元素的不同,我們一般可以將table分爲數組型table和字典型(鍵值對型)table:
- 數組型table:將元素的值順序存儲到table中,元素的索引爲從1開始連續遞增的整數。例如:
arrayTbl = {3, 5, 7}
arrayTbl對應的key爲:1, 2, 3
- 字典型table:將元素的鍵值對按照鍵的哈希值順序存儲到table中,元素的索引爲鍵值對的鍵。例如:
kvTbl = {id = 123, level = 99, score = 100}
kvTbl對應的key爲:"id", "level", "score"
數組型table的增刪
對數組型table進行增刪操作直接使用Lua自帶的table操作函數table.insert和table.remove即可!例如:
-- 數組型table
local arrayTbl = {3, 5, 7}
-- 增
table.insert(arrayTbl, 9) -- {3, 5, 7, 9}
-- 刪
table.remove(arrayTbl, 1) -- {5, 7, 9}
ps:table.insert和table.remove的具體使用方法:Lua table之增刪table.insert和table.remove
字典型table的增刪
然而對於字典型的table,Lua自帶的table操作函數一般都是不適用的!
從table.insert(list, [pos, ]value)和table.remove(list[, pos])的API就可以看到這兩個函數都是與pos相關的,而字典型的table我們取不到pos!
so,字典型的table如何進行增刪操作呢?
其實很easy,如下:
-- 字典型table
local kvTbl = {id = 123, level = 99, score = 100}
-- dump(kvTbl) -- {"level" = 99, "score" = 100, "id" = 123} 存儲的順序與table定義時的順序並不相同
-- 增
kvTbl["rank"] = 66
-- dump(kvTbl) -- {"level" = 99, "score" = 100, "rank" = 66, "id" = 123}
kvTbl.count = 88
-- dump(kvTbl) -- {"score" = 100, "id" = 123, "count" = 88, "rank" = 66, "level" = 99}
-- 刪
kvTbl["score"] = nil
-- dump(kvTbl) -- {"id" = 123, "rank" = 66, "level" = 99, "count" = 88}
kvTbl.rank = nil
-- dump(kvTbl) -- {"id" = 123, "level" = 99, "count" = 88}