【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法

news2024/10/6 22:31:31

文章目录

  • 💨更多相关知识👇
    • 一、lua遍历table的几种方式
      • 🍂pairs遍历
      • 🍂ipairs遍历
      • 🍂i=1,#xxx遍历
        • 🌟代码演示
      • 🍂pairs 和 ipairs区别
    • 二、如何打印出脚本自身的名称
    • 三、Lua运算符
      • 🔸算术运算符
        • 🌟代码演示
      • 🔸关系运算符
      • 🔸逻辑运算符
      • 🔸其他运算符
      • 🔸运算符优先级
    • 四、math库
    • 五、字符串操作方法
      • 🔹string.upper(argument)
      • 🔹string.lower(argument)
      • 🔹string.gsub(mainString,findString,replaceString,num)
      • 🔹string.find (str, substr, [init, [plain]])
      • 🔹string.reverse(arg)
      • 🔹string.format(...)
      • 🔹string.char(arg)
      • 🔹string.byte(arg[,int])
      • 🔹string.len(arg)
      • 🔹string.rep(string, n)
      • 🔹..
      • 🔹string.sub()
      • 🔹string.match
      • 🔹预置的字符分类及其对应的含义
  • 作者:KJ.JK

💨更多相关知识👇

💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇)

💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇)

💖Spring中的依赖注入、setter与构造器注入、自动装配与集合注入详细描述及使用(XML版中篇)


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:JavaEE进阶教程系列


一、lua遍历table的几种方式

            lua常用的遍历方式有三种,使用 "ipairs遍历、使用pairs遍历、使用i=1,#xxx遍历"

🍂pairs遍历

           pairs"根据tbtest中key的hash值排列的顺序来遍历",并非创建table时各个元素的顺序
           
           for key, value in pairs(tbtest) do //key: 下标 valueL:值 tbset:
              table的名字
               XXX
           end

🍂ipairs遍历

              ipairs" 会从table数组(lua的hash表和数组都是用的table)下标1开始,一直遍历到key不连续为止(即下表非数字)"
              
              for key, value in ipairs(tbtest) do
                  XXX
              end

🍂i=1,#xxx遍历

             这种遍历依赖于#xxx获取到的长度,"通常建议用于数组型table,且下表连续"。
             否则可能表现不一致。或者容易取出nil值
             
     for i=1, #(tbtest) do
         XXX
     end

🌟代码演示

tbtest1 = {
         a = "a",
        [1] = "1",
         b = "b",
         c = "c",
        [2] = "2",
        [4] = "4",
}

print("pairs(tbtest1)")
for key, value in pairs(tbtest1) do
print(tostring(key)..":"..tostring(value))
end

print("ipairs(tbtest1)")
for key, value in ipairs(tbtest1) do
print(tostring(key)..":"..tostring(value))
end

print("i=1,#(tbtest1)")
for i=1, #tbtest1 do
print(tostring(i)..":"..tostring(tbtest1[i]))
end

请添加图片描述


🍂pairs 和 ipairs区别

"常用用法: pairs用于迭代元素,ipairs用于迭代数组"

"pairs:"
         1.pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;
         2.pairs 遍历 table时,是乱序的, 并且无法用 # 求出其大小
         3.用pairs遍历数组,跳过了nil,可以访问到nil后面的元素
         
-----------------------------------------------------------------------------------------------------------------------------------------------------------

"ipairs:"
        1.ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出; 它只能遍历到表中出现的第一个不是整数的key

二、如何打印出脚本自身的名称

           print(arg[0]) --文件名存储在arg[0]上

三、Lua运算符

运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算

Lua提供了以下几种运算符类型:

                   * 算术运算符
                   
                   * 关系运算符
                   
                   * 逻辑运算符
                   
                   * 其他运算符

🔸算术运算符

操作符描述
+加法
-减法
*乘法
/除法 (用作除法运算,计算结果包含小数部分)
%取余
^乘幂
-负号
//整除运算符 (用作整除运算,计算结果不包含小数部分)

🌟代码演示

a=9;
b=2;
print(a+b) //11
print(a-b) //7
print(a*b) //18
print(a/b) //4.5
print(a%b) //1
print(a^b) //81
print(-a) //-9
print(a//b) //4

/ 用作除法运算,计算结果包含小数部分,// 用作整除运算,计算结果不包含小数部分

请添加图片描述


🔸关系运算符

操作符描述实例
==等于,检测两个值是否相等,相等返回 true,否则返回 false(A == B) 为 false
~=不等于,检测两个值是否相等,不相等返回 true,否则返回 false(A ~= B) 为 true
>大于,如果左边的值大于右边的值,返回 true,否则返回 false(A > B) 为 false
<小于,如果左边的值大于右边的值,返回 false,否则返回 true(A < B) 为 true
>=大于等于,如果左边的值大于等于右边的值,返回 true,否则返回false(A >= B) 返回false
<=小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false(A <= B) 返回true

🔸逻辑运算符

操作符描述实例
and逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。(A and B) 为 false
or逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。(A or B) 为 true
not逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。not(A and B) 为true

🔸其他运算符

操作符描述实例
连接两个字符串a…b ,其中 a 为 “Hello " , b 为 “World”, 输出结果为"Hello World”
#一元运算符,返回字符串或表的长度。#“Hello” 返回 5

🔸运算符优先级

请添加图片描述


四、math库


math.abs (x):返回 x 的绝对值

----------------------------------------------------------------------------------------------------------------------------------

math.acos (x):返回 x 的余弦(用弧度表示)

----------------------------------------------------------------------------------------------------------------------------------

math.asin (x):返回 x 的反正弦值(用弧度表示)

----------------------------------------------------------------------------------------------------------------------------------

math.atan (y [, x]):返回 y/x 的反正切值(用弧度表示)

----------------------------------------------------------------------------------------------------------------------------------

math.deg (x):将角 x 从弧度转换为角度

----------------------------------------------------------------------------------------------------------------------------------

math.exp (x):返回 ex 的值 (e 为自然对数的底)

----------------------------------------------------------------------------------------------------------------------------------

"math.ceil (x):返回不小于 x 的最小整数值 //变大

如: math.ceil(3.3) -> 4
    math.ceil(-3.3) -> -3

----------------------------------------------------------------------------------------------------------------------------------

"math.floor (x):返回不大于 x 的最大整数值 //变小

如: math.floor(3.3) -> 3
    math.floor(-3.3) -> -4

----------------------------------------------------------------------------------------------------------------------------------

"math.fmod (x, y):取模运算 (返回x/y的余数): math.fmod(16,3) -> 1

----------------------------------------------------------------------------------------------------------------------------------

"math.modf(): 返回取整后的值以外,函数 modf 还会返回小数部分作为第二个结果
如: math.modf(15.6) -> 15 0.6
----------------------------------------------------------------------------------------------------------------------------------

math.log (x [, base]):返回以指定底的 x 的对数。 默认的 base 是 e (因此此函数返回 x 的自
然对数)
----------------------------------------------------------------------------------------------------------------------------------

math.max (x, ···):返回参数中最大的值

----------------------------------------------------------------------------------------------------------------------------------

math.maxinteger:最大值的整数

----------------------------------------------------------------------------------------------------------------------------------

math.min (x, ···):返回参数中最小的值

----------------------------------------------------------------------------------------------------------------------------------

math.mininteger:最小值的整数

----------------------------------------------------------------------------------------------------------------------------------

math.pi:π 的值

----------------------------------------------------------------------------------------------------------------------------------

math.rad (x):将角 x 从角度转换为弧度

----------------------------------------------------------------------------------------------------------------------------------

math.random ([m [, n]])
      当不带参数调用时, 返回一个 [0,1) 区间内一致分布的浮点伪随机数。 当以两个整数 m 与 n 调用时,
      math.random 返回一个 [m, n] 区间 内一致分布的整数伪随机数。 (值 n-m 不能是负数,且必须在
      Lua 整数的表示范围内。) 调用 math.random(n) 等价于 math.random(1,n)

----------------------------------------------------------------------------------------------------------------------------------

math.sin (x):返回 x 的正弦值(假定参数是弧度)

----------------------------------------------------------------------------------------------------------------------------------

math.sqrt (x):返回 x 的平方根(你也可以使用乘方 x^0.5 来计算这个值。)

----------------------------------------------------------------------------------------------------------------------------------

math.tan (x):返回 x 的正切值(假定参数是弧度)

----------------------------------------------------------------------------------------------------------------------------------

math.tointeger (x):如果 x 可以转换为一个整数, 返回该整数。 否则返回 nil

----------------------------------------------------------------------------------------------------------------------------------

math.pow(x, y):得到x的y次方

五、字符串操作方法


🔹string.upper(argument)

"string.upper(argument): 字符串全部转为大写字母"

        demo="abcd";
        print(string.upper(demo))

请添加图片描述


🔹string.lower(argument)

"string.lower(argument) : 字符串全部转为小写字母"

       demo="ABCD";
       print(string.lower(demo))

请添加图片描述


🔹string.gsub(mainString,findString,replaceString,num)

"string.gsub(mainString,findString,replaceString,num): 在字符串中替换"

"mainString: 要操作的字符串
"findString: 被替换的字符
"replaceString: 要替换的字符
"num: 替换次数(可以忽略,则全部替换)

------------------------------------------------------------------------------------------------------------------------------

a="acvbc"
b=string.gsub(a,"c","e")
print(b)
print("---------------------------------------------")
print(string.gsub("aabaca","a","d"))
print(string.gsub("aabaca","a","d",2))

请添加图片描述


🔹string.find (str, substr, [init, [plain]])

"string.find (str, substr, [init, [plain]]): (在字符串里面找子字符串)

"在一个指定的目标字符串 str 中搜索指定的内容 substr,如果找到了一个匹配的子串,就会返回这
个子串的起始索引和结束索引,不存在则返回 nil
"init 指定了搜索的起始位置,默认为 1,如果为负数表示从右往左开始寻找子字符串
"plain 表示是否以正则表达式匹配

--------------------------------------------------------------------------------------------------------------------------------
print(string.find("abccda","a"))
print(string.find("abccda","a",-1)) -- 从右往左找

请添加图片描述


🔹string.reverse(arg)

"string.reverse(arg): 字符串反转"
--------------------------------------------------------------------------------------------------------------------------------

print(string.reverse("abc"))

请添加图片描述


🔹string.format(…)

    "string.format(...): 返回一个类似printf的格式化字符串"

🔹string.char(arg)

"string.char(arg): 将整型数字转成字符并连接"

--------------------------------------------------------------------------------------------------------------------------------

print(string.char(97,98,99,100)) //abcd

请添加图片描述


🔹string.byte(arg[,int])

" string.byte(arg[,int]) : 转换字符为整数值(可以指定某个字符,默认第一个字符) "
--------------------------------------------------------------------------------------------------------------------------------

print(("a"):byte()) -- 得到字符的ascii码值

print(string.byte("abcd",2)) -- 指定转数字,将b字符转数字

print(string.byte("abcd")) -- 默认将第一个字符转数字

请添加图片描述


🔹string.len(arg)

"string.len(arg): 计算字符串长度"
-- #也可以计算长度
--------------------------------------------------------------------------------------------------------------------------------

a="abcas";

print(#a)

print(string.len(a))

请添加图片描述


🔹string.rep(string, n)

"string.rep(string, n): 返回字符串string的n个拷贝"
---------------------------------------------------------------------------------
-----------------------------------------------

print(string.rep("abc",2))


请添加图片描述


🔹…

"..:链接两个字符串" 
--------------------------------------------------------------------------------------------------------------------------------

print("abc".. "hda")

请添加图片描述


🔹string.sub()

"string.sub(s, i [, j]): 截取字符串"

s:要截取的字符串

i:截取开始位置

j:截取结束位置,默认为 -1,最后一个字符

--------------------------------------------------------------------------------------------------------------------------------

print(string.sub("abc",1,2))

请添加图片描述


🔹string.match

"string.match: 返回的是目标字符串中与模式相匹配的那部分子串": print(string.match("abcdaa","a")) -- a 返回的第一个

🔹预置的字符分类及其对应的含义

字符含义
.任意字符
%a字母
%c控制字符
%d数字
%g除空格外的可打印字符
%l小写字母
%p标点符号
$s空白字符
$U大写字母
%w字母和数字
%x十六进制数字

作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

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

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

相关文章

微服务治理-含服务线上稳定性保障建设治理

微服务的概念 任何组织在设计一套系统&#xff08;广义概念上的系统&#xff09;时&#xff0c;所交付的设计方案在结构上都与该组织的沟通结构保持一致。 —— 康威定律 微服务是一种研发模式。换句话理解上面这句康威定律&#xff0c;就是说 一旦企业决定采用微服务架构&am…

Js逆向教程-12FuckJs

Js逆向教程-12FuckJs 它利用了js的语法特性&#xff1a; 一、特性1 任何一个js类型的变量结果 加上一个字符串 &#xff0c;只会变成字符串。 数组加上字符串&#xff1a; [0]"" 0true加上字符串 true "" true数字加上字符串 1"" 1二、特性…

14天学习训练营之 初识Pygame

目录 学习知识点 PyGame 之第一个 PyGame 程序 导入模块 初始化 ​​1.screen 2. 游戏业务 学习笔记 当 init () 的时候&#xff0c;它在干什么&#xff1f; init () 实际上检查了哪些东西呢&#xff1f; 它到底 init 了哪些子模块&#xff1f; 总结 14天学习训练营导…

2023年计算机毕设选题推荐

同学们好&#xff0c;这里是海浪学长的毕设系列文章&#xff01; 对毕设有任何疑问都可以问学长哦! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越…

·工业 4.0 和第四次工业革命详细介绍

工业 4.0 是制造/生产及相关行业和价值创造过程的数字化转型。 目录 工业 4.0 指南 工业 4.0 与第四次工业革命互换使用&#xff0c;代表了工业价值链组织和控制的新阶段。 网络实体系统构成了工业 4.0 的基础&#xff08;例如&#xff0c;「智慧机器」&#xff09;。他们使用…

基于SpringBoot+Vue的疫苗接种管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7 数据库管理工具&#xff1a;Navicat 12 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / MyEclipse 是否Maven项…

实验二 帧中继协议配置

计算机网络实验实验二 帧中继协议配置一、实验目的二、实验内容三、实验条件四、实验步骤4.1 连接帧中继交换网4.2 创建DLCI4.3 创建串行接口间的虚电路映射关系4.4 配置路由器的串行接口七、思考题实验二 帧中继协议配置 一、实验目的 掌握路由器上配置帧中继协议的方法 掌握…

SSM整合(一)

SSM整合之简单使用通用mapper 1.准备工作 1.1 在java文件夹下面创建所需要的目录 1.2 导入SSM整合时所需要的所有依赖 <properties><!--这个是统一一些spring插件的包名,避免因为版本不一样而报错--><spring.version>5.3.22</spring.version></p…

SAP S4 FI 后台详细配置教程文档 PART2 (财务会计的基本设置篇)

本篇是系列文章的第二部分&#xff0c;目标是家在配置“字段状态变式”和“年度与期间的配置” 目录 1、 字段状态变式 1.1定义字段状态变式 1.2 向字段状态变式分配公司代码 2、会计年度与记账期间 2.1维护会计年度变式 2.2 向一个会计年度变式分配公司代码 2.3定义未结…

服务器虚拟化有什么好处

服务器虚拟化是一种逻辑角度出发的资源配置技术&#xff0c;是物理实际的逻辑抽象。对于用户&#xff0c;虚拟化技术实现了软件跟硬件分离&#xff0c;用户不需要考虑后台的具体硬件实现&#xff0c;而只需在虚拟层环境上运行自己的系统和软件。 说起服务器虚拟化这个技术&…

你的新进程是如何被内核调度执行到的?(下)

接上文你的新进程是如何被内核调度执行到的&#xff1f;&#xff08;上&#xff09; 四、新进程加入调度 进程在 copy_process 创建完毕后&#xff0c;通过调用 wake_up_new_task 将新进程加入到就绪队列中&#xff0c;等待调度器调度。 //file:kernel/fork.c long do_fork(.…

表白墙服务器版【交互接口、服务器端代码、前端代码、数据存入文件/数据库】

文章目录 一、准备工作二、约定前后端交互接口三、实现服务器端代码 四、调整前端页面代码五、数据存入文件六、数据存入数据库一、准备工作 1) 创建 maven 项目2) 创建必要的目录 webapp, WEB-INF, web.xml&#xff1b;web.xml如下&#xff1a;<!DOCTYPE web-app PUBLIC&qu…

家居行业如何实现智能化?快解析来助力

什么是智能家居&#xff1f;主要是指利用先进的电子通信技术&#xff0c;将居家生活有关的各个子系统有机结合在一起&#xff0c;通过网络化便可以对这些系统进行智能控制与管理。智能家居概念之所以逐渐普及&#xff0c;得益于物联网、大数据、人工智能等新兴技术的进步。智能…

科学计算模型 Numpy 详解

本文主要介绍Numpy&#xff0c;并试图对其进行一个详尽的介绍。 通过阅读本文&#xff0c;你可以&#xff1a; 了解什么是 Numpy掌握如何使 Numpy 操作数组&#xff0c;如创建数组、改变数组的维度、拼接和分隔数组等掌握 Numpy 的常用函数&#xff0c;如数组存取函数、加权平均…

表关联查询

表关联查询 1.表别名 当表的名字很长或者执行一些特殊查询时&#xff0c;为了方便操作或者需要多次使用相同的表时&#xff0c;可以为表指定别名&#xff0c;以替代表原来的名称。 在为表取别名时&#xff0c;要保证不能与数据库中的其他表的名称冲突。 对单表做简单的别名查询…

能否通过手机号查询他人位置及技术实现(省流:不能)

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1fad2;每日emo&#xff1a;纪念我死去的爱情 &#x1f342;灵感来源&#xff1a;艺术源于生活&#xff0c…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.2 Spring 缓存使用方式

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.2 Spring 缓存使用方式5.2.1 Spring 缓存使用5.2.…

数字集成电路设计(五、仿真验证与 Testbench 编写)(二)

文章目录4. 信号时间赋值语句4.1 时间延迟的语法说明4.2 时间延迟的描述形式4.3 边沿触发事件4.3.1 事件表达式4.3.2 边沿触发语法格式4.4 电平敏感事件4. 信号时间赋值语句 &#xff01;&#xff01;信号赋值语句是硬件描述语言非常重要的一条语句&#xff0c;是对于任意信号…

Zookeeper:Zookeeper的主从选举机制

ZAB 协议&#xff0c;全称 Zookeeper Atomic Broadcast&#xff08;Zookeeper 原子广播协议&#xff09;&#xff0c;是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的一致性协议。基于该协议&#xff0c;ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副…

业务定制型异地多活架构设计

1个原理 大道至简-异地多活核心原理 异地多活本质上是 CAP 中的AP 大道至深-CAP 粒度 CAP 关注的粒度是数据&#xff0c;而不是系统&#xff0c;需要根据不同业务的数据特点来设计异地多活 延迟 CAP 是忽略网络延迟的 &#xff0c;但工程落地不可能做到零延迟 分区容忍…