--------------------------------------------
-----更新Table
-- toTable:旧数据
-- fromTable:新增数据
-- isDeleteOld:是否删除不被匹配的旧数据
--------------------------------------------
function Tool.UpdateToTable(toTable, fromTable, isDeleteOld)
if not toTable then
return fromTable;
end
local kList = {};
for k, v in pairs(toTable) do
kList[k] = true;
end
for k, v in pairs(fromTable) do
if type(v) == "table" then
if kList[k] then
-- 刷新子表
kList[k] = nil;
Tool.UpdateToTable(toTable[k], v);
else
-- 增加字表
toTable[k] = {};
Tool.UpdateToTable(toTable[k], v);
end
else
local oldValue = kList[k];
if oldValue then
-- 刷新数据
kList[k] = nil;
if oldValue ~= v then
toTable[k] = v;
end
else
-- 增加数据
toTable[k] = v;
end
end
end
if isDeleteOld then
for k, _ in pairs(kList) do
-- 删除数据
toTable[k] = nil;
end
end
return toTable;
end
Lua 增量/全量更新table
于 2022-04-30 14:58:45 首次发布
本文详细探讨了用于更新和合并数据表的函数Tool.UpdateToTable的实现方式,该函数能够有效地刷新已有数据,并根据isDeleteOld参数决定是否删除未匹配的旧数据。通过递归处理嵌套表格,确保数据的完整性和一致性。此函数在数据管理和同步场景中具有广泛应用价值。

1087

被折叠的 条评论
为什么被折叠?



