深拷贝和浅拷贝问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pyf_914406232/article/details/76855907
下午遇到一个关于一个表的数值拷贝的问题,有点意思,不多说,直接上代码


--记录玩家的信息
    self._userInfo = {};
for i=1,PLAY_COUNT do
    table.insert(self._userInfo,self._deskUserList:getUserByDeskStation(i-1))
end


这样拷贝的数据是浅拷贝,所以原始数据改变的话,这里的数据也是会改变的,等于号在lua中也是浅拷贝,所以有的时候,你想保存一份数据的时候,就要小心了,


在这里先提供解决深拷贝方法,原理暂时不是很懂:
function clone(object)
    local lookup_table = {}
    local function _copy(object)
        if type(object) ~= "table" then
            return object
        elseif lookup_table[object] then
            return lookup_table[object]
        end
        local newObject = {}
        lookup_table[object] = newObject
        for key, value in pairs(object) do
            newObject[_copy(key)] = _copy(value)
        end
        return setmetatable(newObject, getmetatable(object))
    end
    return _copy(object)
end


这个函数使用方法如下:
--记录玩家的信息
  self._userInfo = {};
  self._userInfo= clone(self._deskUserList._users)
这样就可以解决这个问题。
下面是冒泡时间
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。
。。。。。。。。。。。。。
。。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。
。。。。。。。。。
。。。。。。。。
。。。。。。。
。。。。。。
。。。。。
。。。。
。。。
。。

猜你喜欢

转载自blog.csdn.net/pyf_914406232/article/details/76855907