LUA 中實現table表的深拷貝實例

function DeepCopy( obj )	
	local InTable = {};
	local function Func(obj)
		if type(obj) ~= "table" then   --判斷表中是否有表
			return obj;
		end
		local NewTable = {};  --定義一個新表
		InTable[obj] = NewTable;  --若表中有表,則先把表給InTable,再用NewTable去接收內嵌的表
		for k,v in pairs(obj) do  --把舊錶的key和Value賦給新表
			NewTable[Func(k)] = Func(v);
		end
		return setmetatable(NewTable, getmetatable(obj))--賦值元表
	end
	return Func(obj) --若表中有表,則把內嵌的表也複製了
end

t1 = {a='a','s','d','f','g','h'}
t2 = DeepCopy(t1);  --深拷貝
t3 = t1; --淺拷貝
print(t1)
print(t2)
print(t3)
for i,v in pairs(t2) do
	print(i,v);
end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章