Lua如何实现对象列表顶部新增元素、保留新旧数据并优先获取最新对象
实现方案
核心逻辑说明
你之前的代码问题在于直接将cache[dataName]赋值为单条对象,每次写入都会覆盖旧值。要实现保留历史、新对象存顶部的数组结构,只需要先把cache[dataName]初始化为数组,每次新数据插入数组头部即可,Lua内置的table.insert方法可以直接指定插入位置,无需自行维护索引计数。
完整实现代码
-- 初始化全局缓存表 local cache = {} local dataName = 'deaths' -- 添加数据到列表顶部的函数 function addlist(data) -- 如果对应dataName的数组不存在,先初始化 if not cache[dataName] then cache[dataName] = {} end -- 插入到数组的第1位即顶部,旧数据自动后移 table.insert(cache[dataName], 1, data) end -- 测试示例 -- 添加第一条数据 local data1 = { id = 1, weapon = 'ak' } addlist(data1) -- 添加第二条数据 local data2 = { id = 2, weapon = 'm4' } addlist(data2) -- 读取最新对象(数组第一位) print(cache.deaths[1].id, cache.deaths[1].weapon) -- 输出 2 m4 -- 读取旧对象(数组第二位) print(cache.deaths[2].id, cache.deaths[2].weapon) -- 输出 1 ak -- 获取列表总长度 print(#cache.deaths) -- 输出 2
可选方案:自行维护计数的实现
如果你不想用table.insert的插入逻辑,也可以将新数据追加到数组尾部,索引会自动递增无需手动维护,这种方案最新数据会在数组末尾,读取时取最后一位即可:
function addlist(data) if not cache[dataName] then cache[dataName] = {} end -- 新数据追加到数组尾部 cache[dataName][#cache[dataName] + 1] = data end -- 读取最新对象 local latest = cache[dataName][#cache[dataName]]
内容的提问来源于stack exchange,提问作者PenT1x
相关产品推荐
相关产品推荐

