如何用另一张Lua表中的值更新目标Lua表?
Lua 实现类似 Python dict.update() 的表更新功能
Lua 标准库中并没有内置直接对应 Python dict.update() 的表更新函数,但你可以自己写一个极简的实现来满足需求——遍历差异表的所有键,将对应的值覆盖到目标表中,同时保留目标表原有的未指定键值。
完整示例代码
-- 假设你已经有第三方库提供的deepcopy函数 local t1 = { name = "alfa", weight = 10, height = 5, speed = 4, price = 100, } local t2_diff = { name = "beta", weight = 20, speed = 6, } -- 深拷贝得到t2 local t2 = deepcopy(t1) -- 实现update函数 local function table_update(target, diff) for k, v in pairs(diff) do target[k] = v end end -- 更新t2 table_update(t2, t2_diff) -- 验证结果:t2的name、weight、speed被替换,height、price保留原值 print(t2.name) -- 输出 beta print(t2.height) -- 输出 5 print(t2.price) -- 输出 100
补充说明
- 这个
table_update函数会直接修改目标表(这里是t2),和Python的dict.update()行为一致。 - 如果差异表中存在值为
nil的键,执行后目标表中对应键会被移除(因为Lua表中键值为nil等同于不存在),如果需要保留原键(即使差异表传nil),可以在函数里加判断:if v ~= nil then target[k] = v end。
内容的提问来源于stack exchange,提问作者pepoluan
相关产品推荐
相关产品推荐

