Linux | c&cpp | Email | github | QQ群:425043908 关注本站

itarticle.cc

您现在的位置是:网站首页 -> 代码相关 文章内容

Lua循环与迭代器函数-itarticl.cc-IT技术类文章记录&分享

发布时间: 5年前代码相关 187人已围观返回

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

发布时间: 5年前代码相关187人已围观返回回到顶端

很赞哦! (1)

上一篇:返回列表

下一篇:Lua的rawset和rawget浅析

文章评论

  • 请先说点什么
    热门评论
    186人参与,2条评论
    lua 3年前
    引用 @ lua:
    [/微笑][/微笑]
    [/鼓掌][/鼓掌][/鼓掌]
    lua 3年前
    [/微笑][/微笑]

站点信息

  • 建站时间:2016-04-01
  • 文章统计:728条
  • 文章评论:82条
  • QQ群二维码:扫描二维码,互相交流