Lua中table.remove处理二维数组失效问题求助
问题根源:误用了
table.remove的返回值 哦,我一眼就看出问题所在了——你把table.remove的返回值重新赋值给了变量t,这直接导致了后续的异常!
先给你理清楚table.remove的核心行为:
- 它直接修改传入的原表,删除指定位置的元素
- 同时返回的是被删除的那个元素,而不是修改后的表
你的代码里:
t = { { 7, "123" }, { 8, "234" }, { 9, "345" } } t = table.remove(t, 1) -- 错误!这里把被删除的子数组{7, "123"}赋值给了t
执行这行代码后,原来的二维数组表确实被修改(第一个子数组被删掉了),但变量t现在指向的是被删除的那个一维子数组{7, "123"},而不是修改后的原二维数组。如果后续代码还把t当成二维数组来操作(比如循环遍历子元素、访问t[2][1]之类的),肯定会抛出异常——因为t现在是个只有两个元素的一维表,第二个元素是字符串"123",你没法对字符串做索引访问。
正确的写法
只需要直接调用table.remove,不要把返回值赋值回t:
t = { { 7, "123" }, { 8, "234" }, { 9, "345" } } table.remove(t, 1) -- 直接修改原表,t现在是{{8, "234"}, {9, "345"}}
验证一下
你可以打印修改后的t来确认:
for k, v in ipairs(t) do print(k, v[1], v[2]) end
输出会是:
1 8 234 2 9 345
这样就完全符合你预期的“删除第一个子数组”的需求了,之前花的4小时其实就是因为这一个小小的赋值错误导致的,是不是很坑 😅
内容的提问来源于stack exchange,提问作者DIES
相关产品推荐
相关产品推荐

