美文网首页
Lua循环与迭代器函数

Lua循环与迭代器函数

作者: _凉笙 | 来源:发表于2018-03-20 16:28 被阅读0次

    Lua 语言提供了以下几种循环处理方式:
    while 循环:在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true

    for 循环:重复执行指定语句,重复次数可在 for 语句中控制。

    repeat...until :重复执行循环,直到 指定的条件为真时为止

    循环嵌套:可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)

    一、While循环

    Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。
    statements(循环体语句) 可以是一条或多条语句,condition(条件) 可以是任意表达式,在 condition(条件) 为 true 时执行循环体语句。


    image.png

    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 循环流程图如下:


    image.png

    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
    

    相关文章

      网友评论

          本文标题:Lua循环与迭代器函数

          本文链接:https://www.haomeiwen.com/subject/rihbqftx.html