【问题标题】:In Lua, how do I remove a table within a table?在 Lua 中,如何删除表中的表?
【发布时间】:2016-10-16 04:28:24
【问题描述】:

例如:

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

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

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    就这么简单

    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 分配给您的索引时,这不会明确删除之前存储在该索引中的内容;但它确实降低了存储在那里的引用计数,可能使其符合垃圾收集的条件。

    【讨论】:

    • 哇,感谢您的帮助,尝试了十几种不同的方法,但没有运气:)
    • 如果您以前没有使用过使用重新分配来删除变量的垃圾收集语言,我认为分配nil 不会是任何人的第一个猜测。无论如何,不​​客气。
    猜你喜欢
    • 2015-03-19
    • 2017-10-02
    • 1970-01-01
    • 2011-06-20
    • 2020-08-28
    • 2021-11-23
    • 1970-01-01
    • 2010-12-18
    • 2023-03-31
    相关资源
    最近更新 更多