Table.copy with variable命名表

时间:2017-04-21 22:12:08

标签: lua corona

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

这是表格:

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)工作正常。

谢谢。

2 个答案:

答案 0 :(得分:1)

1)假设您声明了本地 aObjectsbObjects以及其他表格:

local tableofObjectTables = { }
-- store reference to objects table rather than string
tableofObjectTables["a"] = aObjects 
tableofObjectTables["b"] = bObjects 
--more declarations here

现在你尝试应该工作

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

local tableNameToCopy = tableofObjectTables[selectedLetter]
activeObjects = table.copy(_G[tableNameToCopy])

答案 1 :(得分:0)

尝试http://lua-users.org

中的代码

浅拷贝

这是一个简单,天真的实现。它只复制顶级值及其直接子级;没有处理更深层的孩子,元表或特殊类型,如userdata或coroutines。它也容易受到__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

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