美文网首页cocos2d-Luacocos2d
lua 构建key表链表组合体

lua 构建key表链表组合体

作者: 人气小哥 | 来源:发表于2017-08-17 10:51 被阅读12次

    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表链表组合体

        本文链接:https://www.haomeiwen.com/subject/lwygrxtx.html