为什么我的嵌套 Lua 表格按顺序打印出来了?

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

然而,当我使用 pairs() 迭代表格时,它不会按照我放置的顺序输出。我将其放置在 Serial 、Service Days、Connected 中,但它以 Service Days、Serial、Connected 的形式输出。我无法解决这个问题。我有意以不同的方式创建了三行,因为我正在学习并尝试熟悉处理 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,
点赞
用户2858170
用户2858170

根据 Lua 参考手册,pairs 函数使用 next 函数。因此,使用 pairs 迭代器的通用 for 循环遍历顺序是未指定的。

来自 Lua 参考手册:

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

即使是数字索引,枚举索引的顺序也未指定。(要按数字顺序遍历表,请使用数字 for。)

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

如果您执行以下操作:

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

Lua 不会记住您对表键分配值的顺序。 它只会将键映射到值。

2017-07-17 16:16:13