【问题标题】:Why is my nested Lua table printing out of order?为什么我的嵌套 Lua 表打印不正常?
【发布时间】:2017-07-18 00:35:04
【问题描述】:

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

但是,当我使用pairs() 遍历表时,它的输出顺序与我放入的顺序不同。我将它放入串行、服务天数、已连接,它以服务天数的形式出现,串行,连接。我不知道为什么。我故意以不同的方式创建了三行,因为我只是在学习并尝试熟悉处理 Lua 表的不同方式...

代码: 我的表 = {}

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,

【问题讨论】:

    标签: for-loop lua


    【解决方案1】:

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

    来自 Lua 参考手册:

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

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

    如果在遍历过程中,你指定了 next 的行为是未定义的 表中不存在的字段的任何值。但是,您可以修改 现有字段。特别是,您可以清除现有字段。

    如果你这样做:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2019-12-16
      相关资源
      最近更新 更多