首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的嵌套Lua表格打印顺序不正确?

问为什么我的嵌套Lua表格打印顺序不正确?
EN

Stack Overflow用户
提问于 2017-07-18 00:02:42
回答 1查看 131关注 0票数 1

初学者Lua quesiton我正在学习lua,我写了一些代码,一个嵌套表,用来创建类似于包含行和列的表。

但是,当我使用pairs()迭代表时,它的输出顺序与我放置它的顺序不同。我把它放在Serial,Service Days,Connected中,它的结果是Service Days,Serial,Connected。我不知所措,不知道为什么。我故意以不同的方式创建了这三行,因为我只是在学习并尝试适应处理Lua表的不同方式……

代码: myTable = {}

代码语言:javascript
复制
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

结果是:

代码语言:javascript
复制
c:\lua>lua53 primer.lua
7,B9FX,true,
3,2SHA,true,
Service Days,Serial,Connected,
EN

回答 1

Stack Overflow用户

发布于 2017-07-18 00:16:14

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

来自Lua参考手册:

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

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

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

如果你这样做:

代码语言:javascript
复制
myTable[2] = {}
myTable[2]["Serial"] = "2SHA"
myTable[2]["ServDays"] = 3
myTable[2]["Connected"] = true

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45148788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档