You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:10