💨更多相关知识👇
💖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
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/5433be95562c4696a35339f0ac655251.png?x-oss-process=image/resize,w_1400/format,webp)
🍂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
/ 用作除法运算,计算结果包含小数部分,// 用作整除运算,计算结果不包含小数部分
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/d6953939750c4d2e99b79c813d9b4f73.png?x-oss-process=image/resize,w_1400/format,webp)
🔸关系运算符
操作符 |
描述 |
实例 |
== |
等于,检测两个值是否相等,相等返回 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 |
🔸运算符优先级
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/45b1bd510f89498d92265c7f3a55b8b4.png?x-oss-process=image/resize,w_1400/format,webp)
四、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))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/618c3aae329b4b1c9c277ecfb4ca0e77.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.lower(argument)
"string.lower(argument) : 字符串全部转为小写字母"
demo="ABCD";
print(string.lower(demo))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/2da1ed1057ef4a0d983f7e172bd1da19.png?x-oss-process=image/resize,w_1400/format,webp)
🔹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))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/ea16544ad2054d83b6a745e03acb7a8d.png?x-oss-process=image/resize,w_1400/format,webp)
🔹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)) -- 从右往左找
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/519dc04efacf476199cac022cff460ba.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.reverse(arg)
"string.reverse(arg): 字符串反转"
--------------------------------------------------------------------------------------------------------------------------------
print(string.reverse("abc"))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/87d34ffcd0b244acb3db396b9c92189a.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.format(...)
"string.format(...): 返回一个类似printf的格式化字符串"
🔹string.char(arg)
"string.char(arg): 将整型数字转成字符并连接"
--------------------------------------------------------------------------------------------------------------------------------
print(string.char(97,98,99,100)) //abcd
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/912d5e227d2f4659aed0bbab491529d8.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.byte(arg[,int])
" string.byte(arg[,int]) : 转换字符为整数值(可以指定某个字符,默认第一个字符) "
--------------------------------------------------------------------------------------------------------------------------------
print(("a"):byte()) -- 得到字符的ascii码值
print(string.byte("abcd",2)) -- 指定转数字,将b字符转数字
print(string.byte("abcd")) -- 默认将第一个字符转数字
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/8571fb9e76da433281bdfc35e1ac793a.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.len(arg)
"string.len(arg): 计算字符串长度"
-- #也可以计算长度
--------------------------------------------------------------------------------------------------------------------------------
a="abcas";
print(#a)
print(string.len(a))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/253e85c616a64a1dab2ae36ee21df1e1.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.rep(string, n)
"string.rep(string, n): 返回字符串string的n个拷贝"
---------------------------------------------------------------------------------
-----------------------------------------------
print(string.rep("abc",2))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/2642a3eeef4b493eb2db0a61ec2790b8.png?x-oss-process=image/resize,w_1400/format,webp)
🔹..
"..:链接两个字符串"
--------------------------------------------------------------------------------------------------------------------------------
print("abc".. "hda")
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/6210a43bd19b4d11acabe28a9507b2e3.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.sub()
"string.sub(s, i [, j]): 截取字符串"
s:要截取的字符串
i:截取开始位置
j:截取结束位置,默认为 -1,最后一个字符
--------------------------------------------------------------------------------------------------------------------------------
print(string.sub("abc",1,2))
![请添加图片描述 请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/beb3cc2e47e545119a76de4d30c56252.png?x-oss-process=image/resize,w_1400/format,webp)
🔹string.match
"string.match: 返回的是目标字符串中与模式相匹配的那部分子串"
如: print(string.match("abcdaa","a")) -- a 返回的第一个
🔹预置的字符分类及其对应的含义
字符 |
含义 |
. |
任意字符 |
%a |
字母 |
%c |
控制字符 |
%d |
数字 |
%g |
除空格外的可打印字符 |
%l |
小写字母 |
%p |
标点符号 |
$s |
空白字符 |
$U |
大写字母 |
%w |
字母和数字 |
%x |
十六进制数字 |
作者:KJ.JK
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习