最近写了一段代码,发现table有我们自定义索引时候,使用ipairs去遍历table是不行的,无法通过迭代器去拿到我们的数据,eg
local temp = {["one"] = "pathOne",
["two"] = "pathTwo"}
for k,v in ipairs(temp) do --这里不管打印 k 还是 v ,都是空值
print(k)
end
如果使用ipars迭代器的话,我们取得的值是正常的
local temp = {["one"] = "pathOne",
["two"] = "pathTwo"}
for k,v in ipairs(temp) do --这里不管打印 k 还是 v ,都是空值
print(k)
end
输出:
--> one
--> two
因为ipairs不能返回nil,遇到nil则退出。ipairs的遍历要求table的索引是连续的整数,即1,2,3,所以我们第一个索引即为one不是ipairs预期想要的整数1,直接退出了循环;而pairs却没有这种限制,这里是个小坑,再举个例子
local temp =
{
[1] = "testOne",
[4] = "testTwo",
[5] = "testThree"
}
for i,v in pairs(temp) do -- 输出 "testOne" "testTwo" "testThree"
print(temp[i])
end
for i,v in ipairs(temp) do -- 输出 "testOne" k=2时断开,temp中没有2的索引
print(temp[i])
end