在LUA 5.1的代码:
sums = {
["LD1"] = { },
["LD2"] = { },
["LD3"] = { },
["LD4"] = { },
["I1"] = { },
["I2"] = { },
["I3"] = { }
}
for fld = 1, 22, 1 do
table.insert( sums["LD1"] , 0 );
table.insert( sums["LD2"] , 0 );
table.insert( sums["LD3"] , 0 );
table.insert( sums["LD4"] , 0 );
table.insert( sums["I1"] , 0 );
table.insert( sums["I2"] , 0 );
table.insert( sums["I3"] , 0 );
end
for i,O in pairs(sums) do
print(i)
end
显示顺序:
(第一执行)
LD1
LD2
LD3
LD4
I1
I2
I3
(第二执行)
LD1
LD2
LD3
LD4
I1
I2
I3
在Lua 5.2,该序列被呈现以随机顺序:
(第一执行)
I1
I2
LD4
I3
LD1
LD2
LD3
(第二执行)
LD2
LD3
LD4
I3
I1
I2
LD1
为什么当我用LUA 5.2这个错误发生?
两者的Lua 5.1和5.2提及在下面的next
功能 (其pairs
函数使用):
其中指数枚举的顺序没有规定,即使是数字索引。
需要注意的是很多编程语言基于散列的结构(其中的Lua表是 )不保证其数值的任何具体(插入)命令。
换句话说:这不是错误。 你不应该指望在表插入的元素的任何特定的顺序。 你可以期待的唯一的顺序是,当你使用数字作为键,并使用ipairs
功能 ,这将遍历对( 1,t[1]
2,t[2]
...
,同比增长在第一个整数键从表中缺席。
没有指定以表的元素。
你需要创建一个数字指标映射到特定的子表的表sums
。 你甚至可以使用的sums
表来保存你的两个子表,你的排序他们。
例如:
-- create table with sum ids in a specific order
sums = { "LD1", "LD2", "LD3", "LD4", "I1", "I2", "I3" }
-- create subtables in sums for each id
for i,id in ipairs(sums) do
sums[id] = {}
end
-- stick some data in the sum tables
for fld = 1, 22 do
table.insert( sums["LD1"] , 0 );
table.insert( sums["LD2"] , 0 );
table.insert( sums["LD3"] , 0 );
table.insert( sums["LD4"] , 0 );
table.insert( sums["I1"] , 0 );
table.insert( sums["I2"] , 0 );
table.insert( sums["I3"] , 0 );
end
-- show sum tables in order
for i,id in ipairs(sums) do
print(id, sums[id])
end