十三、Lua中的一些库
2016-09-22 21:54
141 查看
Lua中的一些库|果冻想
数学库
1、三角函数(sin, cos tan ...)所有的三角函数都使用弧度单位,可以用deg和rad来转换角度和弧度:
print(math.sin(math.rad(30))) -- 0.5
2、取整函数(floor, ceil)
print(math.floor(5.6)) -- 5
print(math.ceil(5.6)) -- 6
3、最大值和最小值(max, min)
print(math.max(2, 4, 6)) -- 6
print(math.min(2, 4, 6)) -- 2
4、生成伪随机数的函数(random, randomseed)
可以用三种方法调用math.random:
(1)如果在调用时不提供任何参数,它将返回一个在区间[0, 1)内均匀分布的伪随机实数;
(2)如果提供了一个整数n作为参数,它将返回一个在区间[1, n]内的伪随机整数;
(3)如果提供了两个整数参数m和n,它将返回一个在区间[m, n]内的伪随机整数。
print(math.random()) -- 输出一个大于等于0,小于1的值
print(math.random(2)) -- 输出不是1就是2
print(math.random(3, 4)) -- 输出不是3就是4
设置随机数种子:
math.randomseed(os.time())
table库
table库函数将table作为数组来操作。
1.插入和删除函数
table.insertlocal tb = {10, 20, 30}
table.insert(tb, 40) -- 在table的最后插入,结果为:{10, 20, 30, 40}
table.insert(tb, 2, 15) -- 在table的位置2插入,结果为:{10, 15, 20, 30, 40}
table.remove
local tb = {10, 20, 30}
print(table.remove(tb)) -- 删除最后一个元素,并返回30;最后,tb = {10, 20}
print(table.remove(tb, 1)) -- 删除第一个元素并返回10;最后,tb = {20}
2.排序
table.sort可以对一个数组进行排序,还可以指定一个可选的次序函数。这个次序函数有两个参数,如果希望第一个参数在排序结果中位于第二个参数值前,就应当返回true;如果没有提供这个函数,table.sort就使用默认的小于操作。
local tb = {20, 10, 2, 3, 4, 89, 20, 33, 2, 3}
-- 默认是升序排序
table.sort(tb)
for _, v in ipairs(tb) do
print(v)
end
print("=======")
-- 修改为降序排序
table.sort(tb, function (a, b) if a > b then return true end end)
for _, v in ipairs(tb) do
print(v)
end
在实际开发中,我们经常犯这样的错误,总是试图对一个table的索引进行排序。在table中,索引是一个无序的集合。如果对它们进行排序,则必须将它们复制到一个数组中,然后对这个数组进行排序。
local tb = {x = 20, z = 10, y = 30, m = 2, n = 8} -- 这是一个key无序的table
local keyTb = {}
for k, _ in pairs(tb) do
keyTb[#keyTb + 1] = k
end
table.sort(keyTb)
for _, v in ipairs(keyTb) do
print(v .. " = " .. tb[v])
end
3.连接
使用table.concat可以完成数组的连接。它接受一个字符串数组,并返回这些字符串连接后的结果,它有一个可选参数,用于指定插到字符串之间的分隔符local tb = {"Jelly", "Think", "Is", "Good"}
local strTb = table.concat(tb, " ")
print(strTb)
字符串库
1.基础字符串库
local str = "Jelly Think"
-- string.len可以获得字符串的长度
local len = string.len(str)
print(len) -- 11
-- string.rep返回字符串重复n次的结果
str = "ab"
local newStr = string.rep(str, 2) -- 重复两次
print(newStr) -- abab
-- string.lower将字符串大写变成小写形式,并返回一个改变以后的副本
str = "Jelly Think"
newStr = string.lower(str)
print(newStr) -- jelly think
-- string.upper将字符串小写变成大写形式,并返回一个改变以后的副本
newStr = string.upper(str)
print(newStr) -- JELLY THINK
string.sub(s, i, j)函数,它可以从字符串s中提取第i个到第j个字符。在Lua中,字符串的第一个字符的索引是1,但是,索引也可以是负数,表示从字符串的尾部开始计数,索引-1代表字符串的最后一个字符,以此类推。
local str = "[Jelly Think]"
local newStr = string.sub(str, 2, -2)
print(newStr) -- Jelly Think
newStr = string.sub(str, 2, 6)
print(newStr) -- Jelly
(重点:在Lua中,字符串和其它语言的一样,是不可变的,以上的操作,都会返回一个新的值,但并不会修改原来的字符串。谨记,谨记!!!)
函数string.char和函数string.byte用于转换字符及其内部数值表示;string.char函数接受零个或多个整数,并将每个整数转换成对应的字符,然后返回一个由这些字符连接而成的字符串。string.byte(s, i)返回字符串s中第i个字符的内部数值表示,它的第二个参数是可选的,调用string.byte(s)可返回字符串s中第一个字符的内部数值表示。示例代码:
print(string.char(97)) -- a
local i = 98
print(string.char(i, i + 1, i + 2)) -- bcd
print(string.byte("abc")) -- 97
print(string.byte("abc", 2)) -- 98
print(string.byte("abc", 2, 3)) -- 98 99
print(string.byte("abc", -1)) -- 99
string.format(和c语言的printf是一致的)
I/O库
日期与时间
相关文章推荐
- 关于优化lua读取游戏配置表的一些看法
- luars232库中用到的一些C API for lua
- 转载一篇lua table的__index ,setmetable()的一些操作
- 一些lua第三方库
- 一些lua代码
- 软件测试工具loadrunner一些小知识总结(十三)
- Lua的math函数库及一些自定义扩展
- 《Maven权威指南》学习笔记十三_一些依赖查看脚本
- 谈谈一些有趣的CSS题目(十三)-- 巧妙地制作背景色渐变动画!
- Lua 一些常用方法的区别
- 用好lua+unity,让性能飞起来——关于《Unity项目常见Lua解决方案性能比较》的一些补充
- 【COCOS2DX-LUA 脚本开发之十三】解决Cocos2dx-Lua编译到Android找不到CCLuaEngine、HelloWorld或出现get data from file(xxx.lua
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题
- Lua的一些常用函数
- lua table的__index ,setmetable()的一些操作
- 关于lua元表和元方法的例子 自己理解了并加了一些注释
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed以及路径等问题
- 一些cocos2d-x + lua学习资料备忘[持续更新]
- Lua初识之表和函数-十三
- 学习Lua的一些困惑