lua的轉殖函式,table的深度拷貝

2022-03-14 00:07:39 字數 632 閱讀 2032

--深度拷貝table

function deepcopy(obj)

local intable ={};

local function func(obj)

if type(obj) ~= "

table

" then --判斷表中是否有表

return

obj;

endlocal newtable = {}; --定義乙個新錶

intable[obj] = newtable; --若表中有表,則先把表給intable,再用newtable去接收內嵌的表

for k,v in pairs(obj) do --把舊表的key和value賦給新錶

newtable[func(k)] =func(v);

endreturn setmetatable(newtable, getmetatable(obj))--賦值元表

endreturn func(obj) --若表中有表,則把內嵌的表也複製了

end

注意如果裡面有字段是指向自己的,需要單獨拿出,不然會死迴圈

Lua對table進行深拷貝

有時候,在開發當中,想對乙個table進行相關的操作,但是操作完之後能夠不對原本的table產生修改,這時候就需要對table進行乙個拷貝,然後使用這個拷貝的table進行相關的操作。直接對table進行等號賦值,那是不行的,這樣拿到的還是原本table的引用,修改時會把原本table的值一起修改 ...

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

function deepcopy obj local intable local function func obj if type obj table then 判斷表中是否有表 return obj endlocal newtable 定義乙個新錶 intable obj newtable 若...

Lua中的table函式庫

一部分的table函式只對其陣列部分產生影響,而另一部分則對整個table均產生影響.下面會分開說明.table.concat table,sep,start,end concat是concatenate 連鎖,連線 的縮寫.table.concat 函式列出引數中指定table的陣列部分從star...