将值插入嵌套表

Inserting values into nested tables

我对 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

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

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

只需删除内循环。

for _,v in pairs(days) do
    table.insert(v, dw)
    table.insert(v, dh)
end

此外,考虑生成这组 table 的其他选项。

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