插入嵌套表中的值

我对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
点赞
用户2505965
用户2505965

你不需要遍历一个表格去向其中添加值。实际上,当你在遍历它的时候向表格中添加新值 可能会 导致循环永远无法退出,因为每次迭代都会添加新值。幸运的是,你的表格是空的,所以程序没有进入那个循环。

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

此外,考虑其他生成这个表格集合的选项。

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
2016-10-26 07:39:03