为什么我的嵌套Lua表打印乱序?

时间:2017-07-17 16:02:42

标签: for-loop lua

初学者Lua问题 - 我只是学习lua,我写了一些代码,一个嵌套的表来创建类似于行和列的表格。

但是,当我使用pairs()遍历表格时,它不会按照我输入的顺序输出。我将它放入串行,服务天数,连接状态,以及它作为服务日,串行,连接出来。我无法弄清楚原因。我有意创造了三排不同的方式,因为我只是在学习并试图熟悉处理Lua表的不同方法...

代码:     myTable = {}

myTable["headerRow"] = {
    Serial = "Serial",
    ServDays = "Service Days",
    Connected = "Connected" }
myTable[1] = {
    Serial = "B9FX",
    ServDays = 7,
    Connected = true }
myTable[2] = {}
myTable[2]["Serial"] = "2SHA"
myTable[2]["ServDays"] = 3
myTable[2]["Connected"] = true

for k, v in pairs(myTable) do
    for k2, v2 in pairs(v) do
        io.write(tostring(v2),",")
    end
    io.write("\n") --End the row 
end

结果:

c:\lua>lua53 primer.lua
7,B9FX,true,
3,2SHA,true,
Service Days,Serial,Connected,

1 个答案:

答案 0 :(得分:3)

对使用下一个函数。因此,未指定使用对迭代器的泛型for循环中的遍历顺序。

来自Lua参考手册:

https://www.lua.org/manual/5.3/manual.html#pdf-next

  

甚至没有指定枚举索引的顺序   用于数字索引。 (要按数字顺序遍历表,请使用a   数字为。)

     

如果在遍历期间分配,则下一步的行为是未定义的   表中不存在的字段的任何值。但是你可以修改   现有领域。特别是,您可以清除现有字段。

如果您这样做:

myTable[2] = {}
myTable[2]["Serial"] = "2SHA"
myTable[2]["ServDays"] = 3
myTable[2]["Connected"] = true

Lua将不记得您将表格键的值赋予了哪个顺序。它只会将键映射到值。