版权声明:本文为博主原创文章,未经博主允许不得转载。 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
在这里先提供解决深拷贝方法,原理暂时不是很懂:
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)
这样就可以解决这个问题。
下面是冒泡时间
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。
。。。。。。。。。。。。。
。。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。
。。。。。。。。。
。。。。。。。。
。。。。。。。
。。。。。。
。。。。。
。。。。
。。。
。。
。
--记录玩家的信息
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)
这样就可以解决这个问题。
下面是冒泡时间
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。
。。。。。。。。。。。。。
。。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。
。。。。。。。。。
。。。。。。。。
。。。。。。。
。。。。。。
。。。。。
。。。。
。。。
。。
。