lua 构建key表链表组合体

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容