您的位置:首页 > 编程语言 > Lua

十三、Lua中的一些库

2016-09-22 21:54 141 查看


Lua中的一些库|果冻想


本文是对于“果冻想”的《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.insert

local 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库


日期与时间

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: