Lua中字典型table的增刪操作

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}

 

發佈了96 篇原創文章 · 獲贊 40 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章