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

简介: lua遍历table的方式、运算符、math库、字符串操作方法

💨更多相关知识👇

💖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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
7月前
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
55 0
|
19天前
|
数据采集 网络安全 UED
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
本文探讨了如何使用Lua的lua-resty-request库和爬虫代理IP技术从豆瓣网站高效获取图片链接。通过定制请求头部和代理服务,可以应对反爬虫机制,提高爬虫的稳定性和匿名性。示例代码展示了一种方法,但实际应用需考虑版权和法律法规。
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
|
19天前
Lua 运算符
Lua 支持算术、关系、逻辑和其他运算符,包括字符串连接 `..` 和一元长度运算符 `#`。`#` 运算符用于获取字符串或表的长度,如 `&quot;Hello&quot;` 的长度为 5。示例中,`a..b` 连接 &quot;Hello &quot; 和 &quot;World&quot; 输出 &quot;Hello World&quot;,并展示了不同字符串的长度。
|
19天前
Lua 运算符
Lua语言包含算术、关系、逻辑和其他运算符。逻辑运算符包括:`and`(两者都为真才为真)、`or`(其中之一为真即为真)和`not`(反向逻辑)。在给定的实例中,`and`和`or`的用法展示了如何根据变量`a`和`b`的真假值来判断条件。当`a`和`b`都为真时,`and`返回真,`or`也返回真。改变`a`和`b`的值后,`not`运算符用于反转逻辑条件。程序输出显示了不同条件下的结果。
|
19天前
Lua 运算符
Lua 支持算术、关系、逻辑和其他运算符。算术运算符包括加(+), 减(-), 乘(*), 除(/), 取余(%), 乘幂(^)和负号(-)。新引入的整除运算符(&gt;=lua5.3)是//。例如,A=10, B=20,A+B=30,A-B=-10,A*B=200,B/A=2,B%A=0,A^2=100,-A=-10。在 Lua 中,/执行浮点除法,//执行整除。例如,5/2=2.5,5//2=2。
|
19天前
Lua 运算符
Lua支持算术、关系、逻辑和其他运算符。算术运算符包括加(+), 减(-), 乘(*), 除(/), 取余(%), 乘幂(^)和负号(-)。例如,A=10, B=20时,A+B=30,A-B=-10,A*B=200,B/A=2,B%A=0,A^2=100,-A=-10。从lua5.3开始还支持整除运算符(//)。通过实例展示了这些运算符的运用,输出了不同的计算结果。
|
19天前
|
数据采集 存储 数据安全/隐私保护
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
本文介绍如何使用Lua和lua-http库抓取LinkedIn信息,强调了Lua在爬虫开发中的应用。通过配置亿牛云爬虫代理解决IP封锁问题,实现步骤包括安装库、配置代理、发送HTTP请求、解析响应及提取信息。提供的Lua代码示例展示了下载和存储LinkedIn信息的过程。实验成功展示了Lua爬虫的可行性,但也指出需考虑反爬虫策略以应对实际挑战。
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
|
12月前
|
JSON Linux 数据格式
移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
|
Java
Lua常用库,垃圾回收
Lua常用库,垃圾回收
34 0