Lua中如何给table内已有值的指定键后续追加新内容
Lua表同键对应子表的字段追加方法
你之前的写法会触发覆盖是因为第二次赋值时直接给x[1]绑定了一个全新的表对象,原有存储string字段的表会被直接替换。要实现字段追加不需要重新给x[1]赋值,直接操作x[1]指向的原有表新增字段即可。
方法1:直接追加单个字段
适合明确需要新增的字段名的场景,直接给子表的对应字段赋值:
x = {} x[1] = {string = "hallo"} -- 直接给x[1]指向的表新增number字段,不会覆盖原有字段 x[1].number = 10 print(x[1].string) -- 输出 hallo print(x[1].number) -- 输出 10
方法2:批量追加多个字段
如果需要一次性新增多个字段,可以封装通用的表合并函数实现批量追加:
-- 通用表合并函数,将source的所有键值对追加到target中 function table_merge(target, source) for k, v in pairs(source) do -- 若不需要覆盖重名字段,可添加判断:if target[k] == nil then 再赋值 target[k] = v end return target end -- 调用示例 x = {} x[1] = {string = "hallo"} table_merge(x[1], { number = 10, other = "test", flag = true }) print(x[1].string) -- 输出 hallo print(x[1].number) -- 输出 10
内容的提问来源于stack exchange,提问作者Glupschi
相关产品推荐
相关产品推荐

