pairs 与 ipairs 两者的区别如下:
--数组这么定义,貌似没差别
t= {1,2,3,4,5}
for k, v in ipairs(t) do
print(v)
end
print("--------------------")
for k, v in pairs(t) do
print(v)
end
效果看起来一切正常
--手动指定key值
t=
{
[-1] = -1,
[0] = 0,
[1] = 1,
[2] = 2,
}
print("--------------按i=1 ,i++的顺序打印,直到nil")
for k, v in ipairs(t) do
print(v)
end
print("--------------按照hash值顺序,并不是按key大小顺序")
for k, v in pairs(t) do
print(v)
end
仔细看,差别开始出现:
--手动指定key值
t=
{
[-1] = -1,
[0] = 0,
a = "aaa",
[1] = 1,
b = "bbb",
[3] = 3,
}
print("--------------按i=1 ,i++的顺序打印,直到nil")
for k, v in ipairs(t) do
print(v)
end
print("--------------按照hash值顺序,并不是按key大小顺序")
for k, v in pairs(t) do
print(v)
end
接着看差别,ipairs只输出了1,没有输出3,因为2不存在,所以没法向后
总结一下:
ipairs会从key=1,2,3...这样的顺序遍历,保证顺序,不保证完全遍历所有的键值对,遇到第一个nil 值停止;
pairs会遍历所有键值对,但是它是无序的(不保证按照table元素的列举顺序遍历,和key的哈希值有关);