为什么表中的对因不同的初始化方式而不同

  • 本文关键字:初始化 方式 lua
  • 更新时间 :
  • 英文 :


在2个例子中,表似乎做了相同的事情,但输出不同。

local a = {
[0] = 0,
[1] = 1,
[2] = 2,
[3] = 3,
}
for i, v in pairs(a) do
print(v)
end

输出为02.3.1

local a = {}
a[0] = 0
a[1] = 1
a[2] = 2
a[3] = 3
for i, v in pairs(a) do
print(v)
end

输出是1 2 3 0

第二个例子似乎总是先输出数组部分,然后输出哈希部分。但第一个例子的顺序似乎是随机的。为什么

pairs不能保证特定的订单。如果您想要一个特定的顺序,请使用数字for循环。

for i = 0, 3 do
print(a[i])
end

读取

http://www.lua.org/manual/5.4/manual.html#pdf-成对

http://www.lua.org/manual/5.4/manual.html#pdf-下一个

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

pairs不仅不能保证特定的顺序,而且表构造函数也不能保证插入的特定顺序:

构造函数中赋值的顺序是未定义的。(只有当有重复的按键时,此订单才相关。(

Lua参考手册

因此,本声明:

该表似乎做了相同的事情

错误。它可能相当于:

local a = {}
a[3] = 3
a[2] = 2
a[1] = 1
a[0] = 0
for i, v in pairs(a) do
print(v)
end

因此,即使表遍历顺序是由插入决定的——相同的插入,相同的遍历——这将是实现细节——表构造函数可能不会从左到右逐行读取——因为Lua可能会随意打乱分配。

此外,散列映射在实践中必须调整的大小,解决冲突。如果使用表构造函数表达式,Lua将能够至少避免调整大小;理论上,它甚至可以通过选择智能插入顺序来最小化解决冲突所需的工作量。

最新更新