前言:很多人可能会好奇为什么只是一个单纯的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

Lua基础操作<for>_for

可以看到每一个下标对应的值都输出为 table ,而上述list的格式应该也是大多数项目配表的格式.此时需要再获取table里面的值

例:

local list = {{id = 10},{id = 20},{id = 30}}

for k,v in pairs(list) do
	print("打印下标:",k,"打印list对应下标值:",v.id)
end

Lua基础操作<for>_游戏开发_02

此时便能拿到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

Lua基础操作<for>_Lua白话文_03

由此可以看出,因为list下标值不连贯所以中断,只输出连续值.

2.3、结论

经试验可以得出结论:

1.pairs会遍历所有key,遇到中断会直接跳过,不会影响遍历。

2.ipairs遍历必须从 1 开始,步进1,遇到不连贯key 会停止遍历.

如有不对或者不理解的地方请留言方便时会解答.

lua不追求高大上的写法,简单方便即为真理