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}