Lua 将值插入嵌套表

Lua 将值插入嵌套表,lua,lua-table,Lua,Lua Table,我对Lua和编程都是新手。我一直想知道如何使用table.insert来嵌套表。到目前为止,这是我写的,但是它没有向嵌套表中插入任何内容 days = {d1 = {},d2 = {},d3 = {},d4 = {},d5 = {},d6 = {},d7 = {},d8 = {},d9 ={},d10 = {},d11 = {},d12 = {},d13 = {},d14 = {},d15 = {},d16 = {},d17 = {},d18 = {},d19 = {},d20 = {},d2

我对Lua和编程都是新手。我一直想知道如何使用
table.insert
来嵌套表。到目前为止,这是我写的,但是它没有向嵌套表中插入任何内容

days = {d1 = {},d2 = {},d3 = {},d4 = {},d5 = {},d6 = {},d7 = {},d8 = {},d9 ={},d10 = {},d11 = {},d12 = {},d13 = {},d14 = {},d15 = {},d16 = {},d17 = {},d18 =  {},d19 = {},d20 = {},d21 = {},d22 = {},d23 = {},d24 = {},d25 = {} , d26 = {}, d27 = {}, d28 = {}, d29 = {}, d30 = {}, d31 = {}}
dw = 0
dh = 0
for _,v in pairs(days) do
    for _,v in pairs(v) do
        table.insert(v, dw)
        table.insert(v, dh)
    end
end

for _,v in pairs(days) do
    for _,v in pairs(v) do
        print(v)
    end
end

您不需要遍历表来向其添加值。事实上,在迭代时向表中添加值可能会导致循环永远不会退出,因为它会在每次迭代时添加新值。幸运的是,您的表是空的,因此程序永远不会进入该循环

for _,v in pairs(days) do
    for _,v in pairs(v) do -- <- unnecessary, potentially dangerous!
        table.insert(v, dw)
        table.insert(v, dh)
    end
end

也可以考虑生成这组表的其他选项。

local days = (function (t)
    for n = 1, 31 do
        t['d' .. n] = { 0, 0 }
    end

    return t
end) {}
简化:

local days = {}

for n = 1, 31 do
    days['d' .. n] = { 0, 0 }
end

谢谢你,奥卡。这真的很有帮助。有人能解释一下“函数(t)”是如何工作的吗?“t['d'..n]”是如何工作的以及为什么会有“return t”。@laquishabonquiquithe3rd
t['d'..n]
是字符串
'd'
与循环的当前索引的串联,创建
'd1',d2',d3'
等等,用作表
t
中的键
t
是函数的第一个参数,它作为函数表达式(
{}
)后面的新空表传入。我们返回
t
,因此它被分配给
days
变量。这是一个高级的提示,你应该考虑把这个逻辑封装在一个函数中,特别是如果你要创建多个表的时候。只需提取该函数,给它一个名称,然后替换表达式。
local days = {}

for n = 1, 31 do
    days['d' .. n] = { 0, 0 }
end