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

相关推荐
WIN赢9 天前
PostMan使用
测试工具·lua·postman
多多*10 天前
计算机网络期末 网络基础概述
运维·服务器·网络·数据库·计算机网络·oracle·lua
10 天前
Lua复习之何为闭包
开发语言·unity·游戏引擎·lua·交互
码上库利南10 天前
详解Redis的LUA脚本、管道 (Pipelining)、事务事务 (Transactions)
数据库·redis·lua
RPGMZ10 天前
RPGMZ 游戏引擎如何与lua进行互相调用 初探
开发语言·javascript·游戏引擎·lua·rpgmz
Hello.Reader11 天前
Lua 事务双写、RedisGears 异步双写、零停机索引迁移与容量预估
开发语言·lua
虾球xz11 天前
CppCon 2017 学习:Howling at the Moon: Lua for C++ Programmers
开发语言·c++·学习·lua
playmak3r12 天前
某手游cocos2dlua反编译
游戏引擎·lua·cocos2d
测试界清流14 天前
如何使用postman
开发语言·lua
海尔辛15 天前
每日一练之 Lua 表
lua