lua 构建key表链表组合体
有些时候 我们需要用key表 存储一些数据
这样方便直接使用key来索引想要的数据
但是 我们又希望获得正确的序列遍历(key表是无序的)
我们就可以把key表构建成有序链表来实现这一功能
比如服务器传给我们一组家族成员数据
local tbMem = {
{lv = 1, id = 50032, name = "阿迪达斯"},
{lv = 2, id = 60057, name = "耐克"},
{lv = 3, id = 70032, name = "李宁"},
{lv = 4, id = 90025, name = "安踏"},
}
我们希望每次都能通过id来快速索引到一系列值
我们会构建一次key表
local keyMem = {}
for k, v in ipairs(tbMem) do
keyMem[v.id] = v
end
当我们需要遍历只能
for k, v in pairs(keyMem) do
print(k, v.name)
end
--结果 无序
[LUA-print] 50032 阿迪达斯
[LUA-print] 70032 李宁
[LUA-print] 60057 耐克
[LUA-print] 90025 安踏
构建链表遍历
local tbMem = {
{lv = 1, id = 50032, name = "阿迪达斯"},
{lv = 2, id = 60057, name = "耐克"},
{lv = 3, id = 70032, name = "李宁"},
{lv = 4, id = 90025, name = "安踏"},
}
local keyMem = {}
local oldid
for k, v in ipairs(tbMem) do
keyMem[v.id] = v
if oldid then
keyMem[oldid].next = keyMem[v.id]
end
oldid = v.id
end
local l = keyMem[tbMem[1].id]
while l do
print("l.name", l.name, l.lv)
l = l.next
end
--结果 有序
[LUA-print] l.name 阿迪达斯 1
[LUA-print] l.name 耐克 2
[LUA-print] l.name 李宁 3
[LUA-print] l.name 安踏 4
网友评论