--lua ipairs 与 pairs 比较
--[[
pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出
--]]
local fruit = {
[1] = "apple",
[2] = "banana",
[4] = "orange",
[8] = "grape"
}
for k, v in pairs(fruit) do
print("k = " .. k .. " v = " .. v)
end
print("\n")
--[[
运行结果:
k = 1 v = apple
k = 2 v = banana
k = 4 v = orange
k = 8 v = grape
--]]
for k, v in ipairs(fruit) do
print("k = " .. k .. " v = " .. v)
end
print("\n")
--[[
运行结果:(k=2时断开)
k = 1 v = apple
k = 2 v = banana
--]]
--[[
同:都是能遍历集合(表、数组)
异:ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。即不能返回 nil,只能返回数字 0,如果遇到 nil 则退出。
它只能遍历到集合中出现的第一个不是整数的 key。
pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil。
--]]
local numbers = {"one", "two", [3] = "three", ["four"] = "four"}
for k, v in ipairs(numbers) do
print("k = " .. k .. " v = " .. v)
end
print("\n")
--[[
运行结果:
k = 1 v = one
k = 2 v = two
k = 3 v = three
--]]
for k, v in pairs(numbers) do
print("k = " .. k .. " v = " .. v)
end
print("\n")
--[[
运行结果:
k = 1 v = one
k = 2 v = two
k = 3 v = three
k = four v = four
--]]
local country = {}
country.China = "Chinese"
country.India = "Indian"
country.Spain = "Spanish"
for k, v in pairs(country) do
print("k = " .. k .. " v = " .. v)
end
print("\n")
--[[
运行结果:
k = Spain v = Spanish
k = China v = Chinese
k = India v = Indian
--]]
for k, v in ipairs(country) do
print("k = " .. k .. " v = " .. v)
end
print("\n")
--[[
运行结果:空
--]]