前言:很多人可能会好奇为什么只是一个单纯的For,这里想说一下我的一个整体是为了贴近游戏开发,只着重讲解游戏开发中经常使用或者需要避坑的一些东西.如有误人子弟表达不准确的抱歉.
1.数字型
例:
for var = a, b, c do
<执行体>
end
运行则是从a 到 b ,c为步长,不写默认为1,项目中很少会设置步长.
举例:
for i = 1,3,2 do
print("输出a:",i)
end
--输出a:1 3
也可
for i = 1, 3 do
print("输出b:",i)
end
--输出b:1 2 3
通常项目中不会遇到或者不会直接写死b,而是灵活的取值。
例:
local list = {{id = 10},{id = 20},{id = 30}}
for i = 1, #list do
end
首先获取table长度,在进行遍历,后期维护也会非常方便.
2.泛型
注:通过迭代器函数遍历所有值分别为 ipairs 和 pairs.
2.1、pairs
例:
local list = {{id = 10},{id = 20},{id = 30}}
for k,v in pairs(list) do
print("打印下标:",k,"打印list对应下标值:",v)
end
可以看到每一个下标对应的值都输出为 table ,而上述list的格式应该也是大多数项目配表的格式.此时需要再获取table里面的值
例:
local list = {{id = 10},{id = 20},{id = 30}}
for k,v in pairs(list) do
print("打印下标:",k,"打印list对应下标值:",v.id)
end
此时便能拿到v里面的数据,一般策划会在表里配置许多数据,这时就需要根据策划需求if 判断 条件筛选拿到需要的数据.
2.2、ipairs
ipairs 和 pairs 大致相同但需要注意,如果下标不连贯则迭代会中断。
local list = {[1] = "a",[3] = "b",[4] = "c"}
for k,v in ipairs(list) do
print("打印下标:",k,"打印list对应下标值:",v)
end
由此可以看出,因为list下标值不连贯所以中断,只输出连续值.
2.3、结论
经试验可以得出结论:
1.pairs会遍历所有key,遇到中断会直接跳过,不会影响遍历。
2.ipairs遍历必须从 1 开始,步进1,遇到不连贯key 会停止遍历.
如有不对或者不理解的地方请留言方便时会解答.
lua不追求高大上的写法,简单方便即为真理