使用变量作为表名复制表

我想使用另一个变量作为参考来复制一个表。

这是表结构:

local tableofObjectTables = { }
tableofObjectTables["a"] = "aObjects"
tableofObjectTables["b"] = "bObjects"
tableofObjectTables["c"] = "cObjects"
tableofObjectTables["d"] = "dObjects"

这是我的尝试:

local selectedLetter = "a"
local tabletoCopy1 = tableofObjectTables[selectedLetter]
     activeObjects = table.copy(tabletoCopy1)

tabletoCopy 是 "aObjects"。ActiveObjects = table.copy(aObjects) 可以正常工作。

谢谢。

点赞
用户7026995
用户7026995

尝试从 http://lua-users.org 复制代码

浅复制

这是一个简单且幼稚的实现。它仅复制顶层值及其直接子级;它不处理更深层次的子级、元表或特殊类型(例如 userdata 或协程)。它还容易受到 __pairs 元方法的影响。

function shallowcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in pairs(orig) do
            copy[orig_key] = orig_value
        end
    else -- number, string, boolean, etc
        copy = orig
    end
    return copy
end

深复制

深复制复制所有级别(或特定子集级别)。 以下是一个简单的递归实现,此外还处理元表并避免了 __pairs 元方法。

function deepcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in next, orig, nil do
            copy[deepcopy(orig_key)] = deepcopy(orig_value)
        end
        setmetatable(copy, deepcopy(getmetatable(orig)))
    else -- number, string, boolean, etc
        copy = orig
    end
    return copy
end

此外,它是递归的,这意味着对于大型表可能会导致堆栈溢出。

2017-04-22 06:48:28
用户5331361
用户5331361

1) 假设你已经在上面声明了本地aObjectsbObjects和其他表格:

local tableofObjectTables = { }
-- 存储对象表的引用而不是字符串
tableofObjectTables["a"] = aObjects
tableofObjectTables["b"] = bObjects
-- 更多声明在这里

现在,你的尝试应该可以运行了。

2) 如果aObjectsbObjects全局表格,你可以使用_G变量访问它们

local tableNameToCopy = tableofObjectTables[selectedLetter]
activeObjects = table.copy(_G[tableNameToCopy])
2017-04-22 15:44:01