lua 構(gòu)建key表鏈表組合體
有些時(shí)候 我們需要用key表 存儲(chǔ)一些數(shù)據(jù)
這樣方便直接使用key來索引想要的數(shù)據(jù)
但是 我們又希望獲得正確的序列遍歷(key表是無序的)
我們就可以把key表構(gòu)建成有序鏈表來實(shí)現(xiàn)這一功能
比如服務(wù)器傳給我們一組家族成員數(shù)據(jù)
local tbMem = {
{lv = 1, id = 50032, name = "阿迪達(dá)斯"},
{lv = 2, id = 60057, name = "耐克"},
{lv = 3, id = 70032, name = "李寧"},
{lv = 4, id = 90025, name = "安踏"},
}
我們希望每次都能通過id來快速索引到一系列值
我們會(huì)構(gòu)建一次key表
local keyMem = {}
for k, v in ipairs(tbMem) do
keyMem[v.id] = v
end
當(dāng)我們需要遍歷只能
for k, v in pairs(keyMem) do
print(k, v.name)
end
--結(jié)果 無序
[LUA-print] 50032 阿迪達(dá)斯
[LUA-print] 70032 李寧
[LUA-print] 60057 耐克
[LUA-print] 90025 安踏
構(gòu)建鏈表遍歷
local tbMem = {
{lv = 1, id = 50032, name = "阿迪達(dá)斯"},
{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
--結(jié)果 有序
[LUA-print] l.name 阿迪達(dá)斯 1
[LUA-print] l.name 耐克 2
[LUA-print] l.name 李寧 3
[LUA-print] l.name 安踏 4