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

时间:2009-12-01 17:42:15

标签: lua lua-table

例如:

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

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

1 个答案:

答案 0 :(得分:7)

就像

一样简单
items[789] = nil

在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

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

  

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

当您为索引分配nil时,显式删除之前存储在该索引中的内容;但它确实降低了存储在那里的引用数量,可能使它有资格进行垃圾收集。