0%

LuaTable拷贝

Shallow Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
function shallowcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[orig_key] = orig_value
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
DeepCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key)] = deepcopy(orig_value)
end
setmetatable(copy, deepcopy(getmetatable(orig)))
else -- number, string, boolean, etc
copy = orig
end
return copy
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function deepcopy(orig, copies)
copies = copies or {}
local orig_type = type(orig)
local copy
if orig_type == 'table' then
if copies[orig] then
copy = copies[orig]
else
copy = {}
copies[orig] = copy
setmetatable(copy, deepcopy(getmetatable(orig), copies))
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key, copies)] = deepcopy(orig_value, copies)
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
1
// 见链接二https://gist.github.com/Deco/3985043

http://lua-users.org/wiki/CopyTable

https://gist.github.com/Deco/3985043