我正在尝试将表格的行复制到另一个表格。这是我第一次这样做,从逻辑上讲,我只是做了
table.insert(table_destination[l], table_origin[l])
工作正常但是当我修改table_origin中的行时,table_destination也会改变!! 我用谷歌搜索了一下,我遇到了一些深拷贝和浅拷贝。我没有经验,所以我在寻求帮助。
如何将一个表格行复制到另一个表格,以便我可以独立操作两个表格的更改?
答案 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
元方法,用作键的表等等。