Lua 语言提供了以下几种循环处理方式:
while 循环:在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true
for 循环:重复执行指定语句,重复次数可在 for 语句中控制。
repeat...until :重复执行循环,直到 指定的条件为真时为止
循环嵌套:可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)
一、While循环
Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。
statements(循环体语句) 可以是一条或多条语句,condition(条件) 可以是任意表达式,在 condition(条件) 为 true 时执行循环体语句。
while结构体,输出数字1-20
a=1
while (a<=20) do--while循环输出1-20
print (a)
a=a+1--Lua中不能使用a++自增
end
输出1-20奇数
a=1
while (a<=20) do--while循环输出1-20
if (a%2==1) then
print(a)
end
a=a+1--Lua中不能使用a++自增
end
二、For循环
Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在 for 语句中控制。
Lua 编程语言中 for语句有两大类::
数值for循环
泛型for循环
(1)数值 for循环
Lua 编程语言中数值for循环语法格式:
for var=start,end,step do
循环体
end
--这里var会从start变化到end,每次变化--step步长变化
例如以下for循环代码遍历出1-10的顺序和倒序排列
for i=1,10,1 do--顺序
print(i)
end
for i=10,1,-1 do--倒序
print(i)
end
(2)泛型 for循环
泛型for循环通过一个迭代器函数来遍历所有值,类似C#中的foreach语句。
Lua 编程语言中泛型for循环语法格式:
--打印tab的所有值
for k,v in pairs(tab)
do print(k,v)
end
例如遍历一张表中所有的key和value
tab={key1="value1",key2="value2"}
for k,v in pairs(tab) do
print(k,v)
end
输出结果:
key1 value1
key2 value2
三、repeat...until循环
我们注意到循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次。
如果条件判断语句(condition)为 false,循环会重新开始执行,直到条件判断语句(condition)为 true 才会停止执行。
Lua repeat...until 循环流程图如下:
C#中do while 是当满足条件执行而repeat until是直到满足条件停止执行
例如如下程序输出数字1-10
repeat
print(b)
b=b+1
until (b>10)--直到b>10才会停止执行
四、循环嵌套
例子:我们输出1输出一次2输出2次以此类推10输出十次,我们用for嵌套for和for嵌套while试试,代码如下
for i=1,10 do
for j=1,i do
print(i)
end
end
for i=1,10 do
j=1
while (j<=i)
print(i)
j=j+1
end
end
IF语句
if语句结构
if(布尔表达式)then
为true的时候要执行的代码
end
五、迭代器函数(pairs与ipairs)
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址
在Lua中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
在遍历table的时候有一个pairs函数还有另一个ipairs函数,那么这两个有什么区别呢
pairs:迭代 table,可以遍历表中所有的 key 可以返回 nil
ipairs:迭代数组,不能返回 nil,如果遇到 nil 则退出
array={"Lua","C#","JAVA","C"}
array[2]=nil
for k,v in pairs(array) do
print(k,v)
end
for k,v in ipairs(array) do
print(k,v)
end
输出结果
1 Lua
3 JAVA
4 C
1 Lua
pairs迭代table,遍历表中所有的Key和Value
ipairs安装索引从1开始,递增遍历,遇到nil值就停止
自定义迭代函数
以下是泛型for的结构体
for 变量列表 in 迭代函数 状态变量 控制变量 do
--循环体
end
执行过程:
1,调用迭代函数,(把状态变量和控制变量当作参数传递给迭代函数)
2,如果迭代函数的返回值为nil,退出for循环
如果不是nil的话,把返回值赋值给变量列表,并执行循环体
--自定义迭代函数
--state(状态变量):循环的次数 control(控制变量):当前循环次数
function square(state,control)
if(control>=state)then
return nil
else
control=control+1
return control,control*control
end
end
--遍历
for i,j in square,9,0 do
print(i,j)
end
输出结果
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81