如何在Lua中使用table.remove()删除嵌套表元素?
标准Lua中删除嵌套表元素的解决方案
问题场景
给定表 a={ {11,22,33} },需要删除a[1][1](数值11),使表变为a={ {22,33} }。在Pico8 Lua中可使用del(a[1],a[1][1])实现,但直接用标准Lua的table.remove(a[1],a[1][1])无效果,且不想通过a[1][1]=nil再排序的方式处理。
核心原因
标准Lua的table.remove函数第二个参数是元素的索引位置,而非元素的值。你传入的a[1][1]是数值11,不是该元素的索引(索引是1),所以调用无效。
直接解决方案
直接传入元素的索引位置即可:
table.remove(a[1], 1)
执行后a[1]会自动变为{22,33},后续元素会自动前移填补空位,无需额外处理。
通用删除函数(类似Pico8的del)
如果不知道元素的索引,只知道要删除的元素值,可以自定义一个函数实现类似Pico8 del的功能:
function del(tbl, target_val) -- 遍历数组型表(ipairs仅遍历连续整数索引) for idx, val in ipairs(tbl) do if val == target_val then table.remove(tbl, idx) break -- 仅删除第一个匹配项,若要删除所有匹配项则移除break end end end
调用方式:
del(a[1], 11)
执行后同样能得到a={ {22,33} }的结果。
内容的提问来源于stack exchange,提问作者kite
相关产品推荐
相关产品推荐

