为什么 Lua 中的键值对是有序的,即使键是表

local a = {d = 1}
local b = {d = 2}
local test = {}

test[b] = true
test[a] = true

newtest = {
  d = 1,
  c = 2
}
for i in ipairs(test) do
  print(i.d)
end

for k, v in pairs(newtest) do
  print(k, v)
end

**所以为什么 test 的输出是有序的,而 newtest 却不是每次都有序呢?

点赞
用户2858170
用户2858170

Lua 5.3 参考手册 6.1 基本函数: ipairs中:

ipairs (t) 返回三个值(一个迭代器函数、表t和0),这样构造

for i,v in ipairs(t) do body end

可以迭代键和值对(1,t[1]), (2,t[2]),...,直到第一个空值为止。

因此,ipairs无法处理“test”,因为“test”不是从索引1开始的序列。它只有两个键,即表格。

2020-07-30 06:06:15