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

你可能感兴趣的:(lua 构建key表链表组合体)