首页 > 代码库 > lua 打印 table 拷贝table
lua 打印 table 拷贝table
-- 打印tablefunction print_lua_table (lua_table, indent) if lua_table == nil or type(lua_table) ~= "table" then return end local function print_func(str) XLPrint("[Dongyuxxx] " .. tostring(str)) end indent = indent or 0 for k, v in pairs(lua_table) do if type(k) == "string" then k = string.format("%q", k) end local szSuffix = "" if type(v) == "table" then szSuffix = "{" end local szPrefix = string.rep(" ", indent) formatting = szPrefix.."["..k.."]".." = "..szSuffix if type(v) == "table" then print_func(formatting) print_lua_table(v, indent + 1) print_func(szPrefix.."},") else local szValue = http://www.mamicode.com/"" if type(v) == "string" then szValue = string.format("%q", v) else szValue = tostring(v) end print_func(formatting..szValue..",") end endend
--拷贝tablefunction copy_table(ori_tab) if type(ori_tab) ~= "table" then return end local new_tab = {} for k,v in pairs(ori_tab) do local vtype = type(v) if vtype == "table" then new_tab[k] = copy_table(v) else new_tab[k] = v end end return new_tabendfunction deepcopy(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 new_table = {} lookup_table[object] = new_table for index, value in pairs(object) do new_table[_copy(index)] = _copy(value) end return setmetatable(new_table, getmetatable(object)) end return _copy(object)end
貌似deepcopy更厉害一点,找时间求证一下:
This function returns a deep copy of a given table. The function below also copies the metatable to the new table if there is one, so the behaviour of the copied table is the same as the original. But the 2 tables share the same metatable, you can avoid this by changing this ‘getmetatable(object)‘ to ‘_copy( getmetatable(object) )‘.
lua 打印 table 拷贝table
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。