zoukankan      html  css  js  c++  java
  • lua 打印 table 拷贝table

    -- 打印table
    function 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 = ""
                if type(v) == "string" then
                    szValue = string.format("%q", v)
                else
                    szValue = tostring(v)
                end
                print_func(formatting..szValue..",")
            end
        end
    end
    --拷贝table
    function 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_tab
    end
    
    function 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) )'.

  • 相关阅读:
    002Python和JS的不同进制之间的转换实现
    001JS中的非严格相等 ==
    028_同步本地git项目到github和码云
    015你所常见的日常英语
    001CSS三大特性
    014国家地区语言缩写码
    013常用的英语词典Share
    012_犯人的夏日的蚊虫叮咬词汇
    011_中文"上火"的英文怎么说
    我的IT之路这样走过
  • 原文地址:https://www.cnblogs.com/zuibunan/p/3954522.html
Copyright © 2011-2022 走看看