lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别

lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别

介绍

这里我用while、for、repeat until分别输出1-20之间的奇数 ,具体的语法可以看下面的代码

for循环

参数

定义一个初始值为startValue的i,并且i每次改变值是changeValue,直到i的值变为EndValue时执行完当次结束
如果for循环没有changeValue时,则默认changeValue为1,可以不写

csharp 复制代码
--不隐藏changeValue
for i = startValue, EndValue, changeValue do
      
end

--隐藏changeValue
for i = startValue, EndValue do

end

例子如下:

csharp 复制代码
for i = 1, 20 ,1 do
    if(i%2 == 1) then
        logError("i ============> "..i.."为奇数")
    end
end

for i = 1, 20 do
    if(i%2 == 1) then
        logError("i ============> "..i.."为奇数")
    end
end

打印如下:

ipairs和pairs

ipairs和pairs都是遍历表中数据,这两个的区别主要是pairs可以识别多种类型的键值对,但是ipairs只能识别数字为键的数据表。

下面是两种方式的打印,这里我们打印纯数字表、纯字符串表、纯boolean表以及多数据类型的表以及多类型key、value的表

打印纯数字表

csharp 复制代码
--测试表格1
local tabTest1 = {1,2,3,4,5}

--测试表格2
local tabTest2 = {1,2,"a",3,true}

--测试表格3
local tabTest3 = {"1str","2str","3str","4str","5str"}

--测试表格4
local tabTest4 = {true,false,true,false,false}

--测试表格5
local tabTest5 = {
    [1] = 10,
    ["a"] = "str",
    [true] = false,
    [2] = "asd",
}

for k,v in pairs(tabTest1) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

for k,v in ipairs(tabTest1) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end


打印纯字符串类型的方式

csharp 复制代码
--测试表格1
local tabTest1 = {1,2,3,4,5}

--测试表格2
local tabTest2 = {1,2,"a",3,true}

--测试表格3
local tabTest3 = {"1str","2str","3str","4str","5str"}

--测试表格4
local tabTest4 = {true,false,true,false,false}

--测试表格5
local tabTest5 = {
    [1] = 10,
    ["a"] = "str",
    [true] = false,
    [2] = "asd",
}

for k,v in pairs(tabTest1) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

for k,v in ipairs(tabTest1) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end


打印纯boolean表数据

csharp 复制代码
--测试表格1
local tabTest1 = {1,2,3,4,5}

--测试表格2
local tabTest2 = {1,2,"a",3,true}

--测试表格3
local tabTest3 = {"1str","2str","3str","4str","5str"}

--测试表格4
local tabTest4 = {true,false,true,false,false}

--测试表格5
local tabTest5 = {
    [1] = 10,
    ["a"] = "str",
    [true] = false,
    [2] = "asd",
}

for k,v in pairs(tabTest4) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

for k,v in ipairs(tabTest4) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

打印多类型值的表

csharp 复制代码
--测试表格1
local tabTest1 = {1,2,3,4,5}

--测试表格2
local tabTest2 = {1,2,"a",3,true}

--测试表格3
local tabTest3 = {"1str","2str","3str","4str","5str"}

--测试表格4
local tabTest4 = {true,false,true,false,false}

--测试表格5
local tabTest5 = {
    [1] = 10,
    ["a"] = "str",
    [true] = false,
    [2] = "asd",
}

for k,v in pairs(tabTest2) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

for k,v in ipairs(tabTest2) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end


打印多类型键值对的表

csharp 复制代码
--测试表格1
local tabTest1 = {1,2,3,4,5}

--测试表格2
local tabTest2 = {1,2,"a",3,true}

--测试表格3
local tabTest3 = {"1str","2str","3str","4str","5str"}

--测试表格4
local tabTest4 = {true,false,true,false,false}

--测试表格5
local tabTest5 = {
    [1] = 10,
    ["a"] = "str",
    [true] = false,
    [2] = "asd",
}

for k,v in pairs(tabTest5) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

for k,v in ipairs(tabTest5) do
    logError("k=> "..tostring(k)..", v=> "..tostring(v))
end

while

while就是根据后面的条件判定是否执行while内部的方法代码,condition 为判定条件,判定成功则走完这一边之后不在继续执行。

csharp 复制代码
--while condition do
--	  statements
--end

local a = 1
while(a <= 20) do 
    if(a%2 == 1) then
        logError("奇数=============>"..a)
    end
    a = a + 1
end

repeat until

repeat until判定条件在后置,所以当满足条件时不执行上述循环体代码

csharp 复制代码
--repeat
--	  循环体
--until(condition)

local a = 1
repeat 
    if(a%2 == 1) then
        logError("奇数=============>"..a)
    end
    a = a + 1
until(a > 20)

总结

while和for就是可以理解成前置条件语句,满足时执行完毕后不在继续执行。
repeat until理解为后置语句所以当满足条件时不执行。

相关推荐
智购科技自动售卖机厂家3 天前
从STM32到RK3588——自动售货机嵌入式主控方案的架构演进~YH
stm32·嵌入式硬件·物联网·架构·lua·零售·symfony
qq_370773094 天前
Unity游戏xLua逆向实战:从SO版本识别到Lua脚本热替换全链路
游戏·unity·lua
星空露珠8 天前
迷你世界3.0API,事件监听
开发语言·数据结构·数据库·游戏·lua
ellis19709 天前
u3d插件xLua[二]例2:U3DScripting,例3:UIEvent分析
unity·lua
寒水馨11 天前
Windows下载、安装neovim-v0.12.4(附安装包nvim-win64.msi)
windows·编辑器·vim·lua·终端·lsp·neovim
烤代码的吐司君11 天前
Lua 脚本
开发语言·junit·lua
寒水馨11 天前
macOS下载、安装neovim-v0.12.4(附安装包nvim-macos-arm64.tar.gz)
macos·vim·lua·文本编辑器·终端·lsp·neovim
背书包的甜瓜13 天前
Python Excel转lua配置工具
lua
minglie113 天前
esp32集成lua
lua
番茄炒鸡蛋加糖14 天前
Redis--Lua 脚本原子性与滑动窗口限流
数据库·redis·lua