标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的
(string.gmatch)等等。
pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;
但是ipairs则不能返回nil,只能返回数字,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key
days = {"Sunday", "Monday", "Tuesday",m, "Wednesday",
"Thursday", "Friday", "Saturday"}
days2 = {"Sunday", "Monday", "Tuesday",m="hehe", "Wednesday",
"Thursday", "Friday", "Saturday"}
revDays = {}
for i,v in ipairs(days) do
revDays[v] = i
print(i)
print(v)
end
--[[
1Sunday
2Monday
3Tuesday
遇到m是nil退出
--]]
for i,v in pairs(days) do
print(i)
print(v)
end
--[[
1Sunday
2Monday
3Tuesday
5Wednesday
6Thursday
7Friday
8Saturday
--]]
for i,v in ipairs(days2) do
revDays[v] = i
print(i)
print(v)
end
--[[
1Sunday
2Monday
3Tuesday
4Wednesday
5Thursday
6Friday
7Saturday
--]]
for i,v in pairs(days2) do
revDays[v] = i
print(i)
print(v)
end
--[[
1Sunday
2Monday
3Tuesday
4Wednesday
5Thursday
6Friday
7Saturday
mhehe
--]]
由上面4个demo可看出:pairs 只要是表值都会遍历,不管下标是数字还是其他符号都会遍历,碰到nil还会继续往下遍历;
pair只会读入下标是数字的数组,碰到nil结束遍历!