在Lua中,我如何删除一个包含在另一个表中的表呢?

例如:

items = {
    [753] = {
    },
    [192] = {
    },
    [789] = {
    },
    [791] = {
    },
    [790] = {
    },
    [776] = {
    },
}

我想移除789和其中的所有数据。我尝试了: table.remove( items, 2 ); 和 table.remove( items, 789 ); (我不确定索引是如何工作的)但都没有成功。

原文链接 https://stackoverflow.com/questions/1827759

点赞
stackoverflow用户126042
stackoverflow用户126042

这就像使用

items[789] = nil

在 Lua 中,如果一个 table 中的 key 值为 nil,那么这个 key 就不存在了。

> t = { [5] = {}, [10] = {} }
> for k,v in pairs(t) do print(k,v) end
5       table: 0037CBC0
10      table: 0037CBE8
> t[5] = nil
> for k,v in pairs(t) do print(k,v) end
10      table: 0037CBE8

参考 Progamming in Lua, 第二章第五节。(虽然在线版本是针对 Lua 5.0 写的,但是对于 Lua 5.1 仍然适用)

... 可以将 nil 赋值给 table 的一个字段实现删除。

当你将 nil 分配给索引时,这不会_显式地_删除先前存储在该索引中的内容; 但是它会降低存储在该索引中内容的引用计数,并有可能使其符合垃圾回收的条件。

2009-12-01 17:50:15