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

news2024/10/7 6:50:11

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

  • 介绍
  • for循环
    • 参数
    • ipairs和pairs
  • while
  • repeat until
  • 总结

介绍

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

for循环

参数

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

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

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

end

例子如下:

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的表

打印纯数字表

--测试表格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

在这里插入图片描述
打印纯字符串类型的方式

--测试表格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表数据

--测试表格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

在这里插入图片描述

打印多类型值的表

--测试表格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

在这里插入图片描述
打印多类型键值对的表

--测试表格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 为判定条件,判定成功则走完这一边之后不在继续执行。

--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判定条件在后置,所以当满足条件时不执行上述循环体代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SIM卡相关知识介绍

SIM卡简介 SIM卡&#xff08;Subscriber Identity Module&#xff09;是一种用于存储移动电话用户身份信息的智能卡&#xff0c;它是移动通信系统中的重要组成部分。SIM卡主要由微处理器CPU、程序存储器ROM、工作存储器RAM、数据存储器EEPROM和串行通信单元组成。SIM卡中微处理…

C++二分算法:黑名单中的随机数

涉及知识点 二分查找 题目 给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法&#xff0c;从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返回…

Linux | 磁盘文件与动静态库

目录 前言 一、了解磁盘 1、磁盘结构 2、磁盘划分 3、inode与文件名的关系 二、软链接与硬链接 1、如何创建软连接与硬链接文件 2、理解软连接 3、理解硬链接 三、动态库与静态库 1、静态库 &#xff08;1&#xff09;静态库的制作 &#xff08;2&#xff09;静态…

第九章 排序【数据结构】【精致版】

第九章 排序【数据结构】【精致版】 前言版权第九章 排序9.1 概述9.2 插入类排序9.2.1 直接插入排序**1-直接插入排序.c** 9.2.2 折半插入排序**2-折半插入排序.c** 9.2.3 希尔排序 9.3 交换类排序9.3.1冒泡排序**4-冒泡排序.c** 9.3.2 快速排序**5-快速排序.c** 9.4 选择类排…

Blocking waiting for file lock on the registry index 问题解决

问题表现&#xff1a; cargo build时一直卡在Blocking waiting for file lock on the registry index。 解决方法&#xff1a; 1、之前在linux下出现过一次&#xff0c;采用这种方法解决了&#xff1a;rust - Cargo build hangs with " Blocking waiting for file lock…

【已解决】Windows易升报错0xa0000400,一键修复,无损升级至Windows 10/11 22H2

笔者之前在使用的Windows 10版本是企业版LTSC 1809&#xff0c;想升级到22H2版&#xff0c;不想重装系统和所有软件&#xff0c;听说微软官方的“Windows易升”软件可以无损升级&#xff0c;下载这个软件运行之后&#xff0c;卡在第一步&#xff1a; 软件提示&#xff1a;“若要…

SPSS距离分析

1.距离分析 距离分析在统计学和数据科学中指的是评估和量化对象&#xff08;如观测点、个体、案例等&#xff09;之间差异的过程。在数据集中&#xff0c;每个对象通常由一系列的属性或变量表示。距离分析的目的是为了衡量这些对象在多维空间中的相对位置&#xff0c;通常用于…

MSQL系列(十四) Mysql实战-SQL语句 left join inner join On和Where语句的区别

Mysql实战-SQL语句On和Where语句的区别 前面我们讲解了Join的底层驱动表 选择原理&#xff0c;也知道了基本的内连接外连接两种SQL查询表连接方式 但是我们再查询多表的时候on和where语句到底有什么区别? where是过滤条件 ,不满足where的一定不会出现在结果中on是连接条件, …

Leetcode—2731.移动机器人【中等】

2023每日刷题&#xff08;二十二&#xff09; Leetcode—2731.移动机器人 算法思路 参考自灵茶山艾府 实现代码 class Solution { public:const int MOD 1e9 7;int sumDistance(vector<int>& nums, string s, int d) {int n nums.size();vector<long long…

使用<a>标签进行文件下载出现文件名称乱码、文件名变下划线

在使用a标签下载文件时出现了如图所示文件名称显示错误&#xff0c;原因是因为文件中包含中文导致乱码 解决方法使用axios配合Blob&#xff0c;如果项目中没有安装或者不想安装axios使用Ajax跟fetch也是一样可以解决&#xff1a; 使用axios&#xff08;记得引入axios&#xff0…

JJJ:PCI / PCIE 的一些术语和概念

转发事务和非转发事务 在PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;总线中&#xff0c;存在两种类型的事务&#xff1a;转发事务和非转发事务。 1、转发事务&#xff08;Forwarded Transactions&#xff09;&#xff1a;转发事务是指从一个PCIe…

openvpn使用

如何使用OpenVPN搭建局域安全网_宝塔搭建vpn_幸识SQ的博客-CSDN博客 OpenVPN在CentOS7中最简单的搭建局域网_哔哩哔哩_bilibili 最终的效果是&#xff0c;如果安装好服务端后&#xff0c;会生成一个文件&#xff0c;要用到客户端。 客户端安装后&#xff0c;会多个IP 这样&…

关于unity中 编辑器相关逻辑的记录

prefab 在场景中 , 用这个方法可以获取它的磁盘路径: [MenuItem("Gq_Tools/↓获取prefab路径")] public static void SaveDecalParameters() { var objs Selection.objects; var obj objs[0] as GameObject; Object parentObject Prefab…

Amazon MSK 基于 S3 的数据导出、导入、备份、还原、迁移方案

Amazon MSK&#xff08;Amazon Managed Streaming for Apache Kafka&#xff09;是 Amazon 云平台提供的托管 Kafka 服务。在系统升级或迁移时&#xff0c;用户常常需要将一个 Amazon MSK 集群中的数据导出&#xff08;备份&#xff09;&#xff0c;然后在新集群或另一个集群中…

Linux之打印函数调用依赖关系(六十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

extractvalue报错注入理论及实战

报错注入 什么是报错注入 构造语句&#xff0c;让错误信息中夹杂可以显示数据库内容的查询语句&#xff0c;返回报错提示中包括数据库中的内容 如上图所示&#xff0c;通过group by的报错&#xff0c;我们可以知道列数是多少 输入正确的查询数据库的SQL语句&#xff0c;虽然可…

理解交叉熵(Cross Entropy)

交叉熵&#xff08;Cross-Entropy&#xff09;是一种用于衡量两个概率分布之间的距离或相似性的度量方法。在机器学习中&#xff0c;交叉熵通常用于损失函数&#xff0c;用于评估模型的预测结果与实际标签之间的差异。 在分类问题中&#xff0c;交叉熵损失函数通常用于多分类问…

如何在公文套红过程中设置页码

zOffice的套红功能&#xff0c;是把源文件套入到公文模版的书签中去&#xff0c;将两个文件合成一个&#xff0c;那么源文件的一些设置可能会保留也可能会被重置&#xff0c;那么如何在公文套红中保留页码设置呢&#xff1f;当然是通过zOffice丰富的SDK接口来实现控制了&#x…

WebGL软件项目类型

WebGL&#xff08;Web Graphics Library&#xff09;是一种用于在Web浏览器中渲染3D和2D图形的JavaScript API。它提供了强大的能力&#xff0c;可以用于开发各种类型的项目&#xff0c;包括但不限于以下几种&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xf…

Vue 3 中,watch 和 watchEffect 的区别

结论先行&#xff1a; watch 和 watchEffect 都是监听器&#xff0c;都是用来监听响应式数据的变化并执行相应操作。区别是&#xff1a; watch&#xff1a;需要指明要监听的数据&#xff0c;而且在回调函数中可以获取到属性变化的前后值&#xff1b; 适用于需要精确控制监视…