我试图将一个表的行复制到另一个表。从逻辑上讲,这是我第一次这样做
table.insert(table_destination[l], table_origin[l])
没问题,但是当我修改table_origin中的行时,table_destination也会改变!我用谷歌搜索了一下,然后发现了一些深层副本和浅层副本。我没有这方面的经验,所以我寻求帮助。
如何将一个表行复制到另一表,以便可以独立地对两个表进行更改?
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
元方法,用作键的表之类的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句