Lua 中 pairs 与 ipairs 区别

--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")
--[[
运行结果:空
--]]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值