如何将一个字典的键值对应用到另一个Lua字典中?
如何在Lua中深度合并两个嵌套表?
你需要实现深度合并逻辑,因为你的表存在嵌套结构(比如Settings是子表),直接赋值会替换整个子表,而不是合并子表内的键值对。以下是具体实现方案:
递归合并函数
编写一个递归函数,遍历源表的所有键,若遇到嵌套表则继续递归合并,否则直接覆盖目标表的对应值:
local function mergeTables(target, source) for key, value in pairs(source) do -- 如果源值是表,且目标对应值也是表,就递归合并 if type(value) == "table" and type(target[key]) == "table" then mergeTables(target[key], value) else -- 否则直接覆盖目标表的键值 target[key] = value end end return target end
使用示例
将globalData合并到globalDefault中:
local globalDefault = { ["LastPlayed"] = "", ["Grades"] = { ["Grade"] = 1, ["Level"] = 1 }, ["Challenge"] = { ["History"] = {} }, ["Settings"] = { ["ScrollFrameHitbox"] = false } } local globalData = { ["Settings"] = { ["ScrollFrameHitbox"] = true } } -- 执行合并 mergeTables(globalDefault, globalData) -- 验证结果 print(globalDefault.Settings.ScrollFrameHitbox) -- 输出 true
执行后globalDefault的结构就会和你期望的一致:保留所有原有键,仅被globalData覆盖的嵌套键值会更新。
内容的提问来源于stack exchange,提问作者mukeenanyafiq
相关产品推荐
相关产品推荐

