Lua:如何将一条线从一个表复制到另一个表?

时间:2014-06-25 12:26:11

标签: lua copy lua-table

我正在尝试将表格的行复制到另一个表格。这是我第一次这样做,从逻辑上讲,我只是做了

table.insert(table_destination[l], table_origin[l])

工作正常但是当我修改table_origin中的行时,table_destination也会改变!! 我用谷歌搜索了一下,我遇到了一些深拷贝和浅拷贝。我没有经验,所以我在寻求帮助。

如何将一个表格行复制到另一个表格,以便我可以独立操作两个表格的更改?

1 个答案:

答案 0 :(得分:4)

Lua中的表通过引用传递。您需要实现shallowcopy之类的内容来创建一个与其他表具有相同内容的新表。

function shallowcopy(t)
    local t2 = {}
    for k, v in pairs(t) do
        t2[k] = v
    end
    return t2
end

table.insert(table_destination[l], shallowcopy(table_origin[l]))

您还可以实现deepcopy函数,该函数还递归复制所有子表。注意:由于可能的周期和/或不拥有的表,这可能很危险。此函数假定表拥有所有子表,而不仅仅是引用它们。

function deepcopy(t)
    if type(t) ~= 'table' then
        return t
    end
    local t2 = {}
    for k, v in pairs(t) do
        t2[k] = deepcopy(v)
    end
    return t2
end

table.insert(table_destination[l], deepcopy(table_origin[l]))

这两个简单的代码片段不处理复制元表,可能的__pairs元方法,用作键的表等等。

您可以找到更好(或更复杂)的表格复制herehere的实现。