首页 > 代码库 > 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