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理解为后置语句所以当满足条件时不执行。

相关推荐
Macbethad11 小时前
自动化测试技术报告
开发语言·lua
Wpa.wk15 小时前
接口测试 - 接口测试工具 Postman-基础使用
经验分享·测试工具·lua·postman
それども16 小时前
浏览器CSR和SSR渲染区别
javascript·lua
lakernote2 天前
EasyPostman:开源免费的 Postman 替代方案,完美支持国产化操作系统
开源·lua·postman
secondyoung2 天前
Pandoc转换Word文档:使用Lua过滤器统一调整Pandoc文档中的图片和表格格式
经验分享·junit·word·lua·markdown·pandoc·mermaid
Knight_AL2 天前
Redis Lua 脚本核心语法详解:KEYS[1]、ARGV[1]、tonumber 是什么意思?
redis·junit·lua
睡觉然后上课4 天前
LUA的学习
linux·学习·lua
ellis19704 天前
toLua[八] main场景分析
unity·lua
Knight_AL4 天前
Redis Lua 脚本为什么天然具备原子性?
数据库·redis·lua
喵了几个咪4 天前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:用 JavaScript/Lua 解锁动态业务扩展能力
javascript·后端·微服务·golang·lua·admin