首页 > 解决方案 > 为什么当键是表时lua kv对是序列

问题描述

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

**那么为什么测试的打印是有序的,但不是每次都新测试?

标签: lualua-table

解决方案


来自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]), ...,直到第一个 nil 值。

因此ipairs不适用于测试,因为test它不是从索引 1 开始的序列。它只有两个表键。


推荐阅读