在Lua中,如何删除表中的表?

Rob*_*Rob 1 lua lua-table

例如:

items = {
    [753] = {
    },
    [192] = {
    },
    [789] = {
    },
    [791] = {
    },
    [790] = {
    },
    [776] = {
    },
}
Run Code Online (Sandbox Code Playgroud)

我想删除789及其中的所有数据.我试过了两个:table.remove(items,2); 和table.remove(items,789); (我不确定索引是如何工作的)没有运气.

Mar*_*off 7

这很简单

items[789] = nil
Run Code Online (Sandbox Code Playgroud)

在Lua中,如果表中的键具有nil值,那么就好像键不存在一样.

> 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
Run Code Online (Sandbox Code Playgroud)

另见Lua的Progamming,第2.5节.(即使在线版本是为Lua 5.0编写的,这仍然适用于Lua 5.1)

...您可以将nil分配给表字段以将其删除.

分配nil给索引时,不会显式删除先前存储在索引中的内容; 但它确实降低了存储在那里的引用计数,可能使其符合垃圾收集的条件.

  • 如果您之前没有使用过使用重新分配来删除变量的垃圾收集语言,我认为分配"nil"不会是任何人的第一次猜测.无论如何,欢迎你. (2认同)