Lua--Lua标准库

  • 1Lua标准库之数学库(math)
  • 1.1 数学库概念
  • 1.2 math.random
  • 1.3 math.randomseed
  • 1.4 math.abs
  • 1.5 math.floor
  • 1.6 math.ceil
  • 1.7 math.sqrt
  • 1.8 math.fmod
  • 1.9 math.modf
  • 1.10 math.max
  • 1.11 math.min
  • 2 Lua标准库之string库
  • 2.1 string库概念
  • 2.2 string.len
  • 2.3 string.format
  • 2.4 string.find
  • 2.5 string.gsub
  • 3 Lua标准库之table库
  • 3.1 table库概念
  • 3.2 取表长
  • 3.3 table.insert
  • 3.4 table.remove
  • 3.5 table.sort
  • 3.6 table.concat
  • 4 Lua标准库之os库
  • 4.1 os库概念
  • 4.2 时间的3种格式
  • 4.3 取得数值(number)格式的时间值
  • 4.4 获取列表格式的时间值
  • 4.5 获取时间的字符串格式
  • 4.6 计算时间值间隔
  • 4.7 系统时钟
  • 4.8 os.time()
  • 4.9 os.date()


1Lua标准库之数学库(math)

1.1 数学库概念

数学库由算术函数的标准集合组成:如三角函数库(sin,cos,tan,asin,acos,etc),幂指函数(exp,log,log10),舍入函数(floor,ceil)、max、min、pi.数据库也定义了一个幂操作符(^).

lua按电源键代码 lua按键命令库_字符串

1.2 math.random

产生伪随机数,有以下3中调用方式
1.不带参数,将产生【0,1)范围内的随机数

print(math.random())         --输出结果:0.84018771676347

2.带一个参数n,将产生1到n内的随机数(包含1和n)

print(math.random(20))       --输出结果:17

3.带两个参数m和n,将产生m到n内的随机数(包含m和n)

print(math.random(2,60))     --输出结果:51

1.3 math.randomseed

在程序开始时,使用固定的种子初始化随机数发生器,使得每次运行都会拥有相同的关卡
解决方法:使用系统时间作为种子,通常放在脚本最开始的位置

math.randomseed(os.time())

例:

math.randomseed(os.time())
    for  i=1,5  do
        print(math.random(1,10))
end

输出结果:

1
3
1
1
4

1.4 math.abs

math.abs(X),返回X的绝对值,通常在时间戳的计算上使用率最高
例:

local   n=os.time()
for  k=1,1000000    do
end
local  new=os.time()
print(math.abs(new-n))

输出结果:

6

1.5 math.floor

math.floor(X),函数返回不大于参数X的最大整数
例:

print(math.floor(10,2))         --输出结果:10
print(math.floor(-10,-2))       --输出结果:-10

1.6 math.ceil

math.ceil(X).函数返回不小于参数X的最大整数

print(math.ceil(5,10))         --输出结果:5
print(math.ceil(-10,-6))       --输出结果:-10

1.7 math.sqrt

math.sqrt(X),函数返回参数X的平方根或1/2方根,如果X为负,产生域错误。

print(math.sqrt(16))       --输出结果:4.0
print(math.sqrt(-16))      --输出结果:-nan

1.8 math.fmod

math.fmod(X,Y),返回参数X/Y的余数

print(math.fmod(45,60))         --输出结果:45

1.9 math.modf

math.modf(X),将参数X分割为整数和小数,两个返回值

print(math.modf(10,6))          --输出结果:10      0.0

1.10 math.max

math.max(X…),函数返回所有参数的最大值

print(math.max(10,5,2,6,62))    --输出结果:62

1.11 math.min

math.min(X…),函数返回所有参数的最小值

print(math.min(10,5,2,6,62))     --输出结果:2

2 Lua标准库之string库

2.1 string库概念

Lua解释器对字符串的支持有限,一个程序可以创建字符并连接字符串,但是不能截取字符,检查字符串的大小、内容等,操作字符串的功能基本来自于string库

2.2 string.len

string.len(s):返回字符串s的长度

local sString="124dhvjghjgnvjgn457"
print("sString字符串的长度为:"..string.len(sString))

输出结果:

sString字符串的长度为:19

2.3 string.format

string.format(s,i):十进制’d’,十六进制’x’,八进制’o’,浮点数’f’

d=5;y=9;g=6
print(string.format("%02d/%02d/%04d",d,y,g))     --05/09/0006

结合模式串使用

local s="hello %d  world  %s"
print(string.format(s,1,"!"))

输出结果:

hello 1  world  !

2.4 string.find

string.find(s,i):查找字符串s和i字符串相对应的位置,返回起始和结束索引值

s="hello world"
i,j=string.find(s,"hello")
print(i,j)
print(string.sub(s,i,j))
print(string.find(s,"world"))
i,j=string.find(s,"1")
print(i,j)
print(string.find(s,"11"))

输出结果:

1	5
hello
7	11
nil	nil
nil

2.5 string.gsub

string.gsub(s,i,j)
s:目标字符(要被操作的字符串)
i:模式串(即将要被替换掉的字符串)
j:替换串(要替换i的字符串)

s=string.gsub("Hello world","world","people")
print(s)          --Hello people

s=string.gsub("hello","l","m")
print(s)          --hemmo

print(string.gsub("hello,people,hello-world","%A","."))        --hello.people.hello.world	3

3 Lua标准库之table库

3.1 table库概念

由一些操作table的辅助函数组成:
作用1:对Lua中的表的大小给出一个合理解释,如:getn(取表长),#table(取表长)
作用2:提供一些插入删除元素以及元素排序的函数,如:insert(向表指定位置插key),remove(删除表的指定位),sort(默认升序排序)

3.2 取表长

1.#:返回表的长度
2.Table.getn(t):返回表中元素个数

local t={1,5,6,8,9,4,5,7}
print(#t)      --8
print(table.getn(t))       --在Lua5.3中不可使用

3.3 table.insert

1.不带参数,默认插入位置为最后一位

local t={1,2,5}
table.insert(t,20)
for i,v in pairs(t) do
print("第"..i.."个元素的值为:"..v..".")
end

输出结果:

第1个元素的值为:1.
第2个元素的值为:2.
第3个元素的值为:5.
第4个元素的值为:20.

2.带参数,插入指定位置

local t={1,2,5}
table.insert(t,2,20)
for i,v in pairs(t) do
print("第"..i.."个元素的值为:"..v..".")
end

输出结果:

第1个元素的值为:1.
第2个元素的值为:20.
第3个元素的值为:2.
第4个元素的值为:5.

3.4 table.remove

1.不带参数,默认删除位置为最后一位

local t={1,2,5}
table.remove(t)
for i,v in pairs(t) do
print("第"..i.."个元素的值为:"..v..".")
end

输出结果:

第1个元素的值为:1.
第2个元素的值为:2.

2.带参数,删除指定位置

local t={1,2,5}
table.remove(t,2)
for i,v in pairs(t) do
print("第"..i.."个元素的值为:"..v..".")
end

输出结果:

第1个元素的值为:1.
第2个元素的值为:5.

3.5 table.sort

1.不带排序函数:默认升序

local s=""
local t={1,6,8,9,5,4,7,2}
table.sort(t)
for i=1,#t  do
    s=s..","..t[i]
end
print(s)
s=""
table.sort(t,function(a,b) return a>b end)
for i=1,#t  do
 s=s..","..t[i]
end
print(s)

输出结果:

,1,2,4,5,6,7,8,9
,9,8,7,6,5,4,2,1

2.带排序函数,自定义函数

3.6 table.concat

table,concat(表名,分割符)

local s=""
local t={4,5,2,6,3,1,8}
print(type(table.concat(t,".")))
print(table.concat(t,"."))
print(table.concat(t,"\t"))
print(table.concat(t,"*****"))

输出结果:

string
4.5.2.6.3.1.8
4	5	2	6	3	1	8
4*****5*****2*****6*****3*****1*****8

4 Lua标准库之os库

4.1 os库概念

通常指系统时间的一些取值操作

4.2 时间的3种格式

1.用数值表示时间值
例:

d=12546266

注:这里的12546266是一个以秒为单位的格林威治时间
2.用字符串表示时间
例:

d="2020-11-26 10:25:20"     --2020年11月26日  10点25分20秒
d="11/26/2020  10:25:20"    --2020年11月26日  10点25分20秒

3.时间的列表格式:用table对象来表示时间
例:

d={year=2020,month=11,day=26,hour=10,min=25,sec=20,isdst=false}    --2020年11月26日  10点25分20秒

注:isdst=false表示不使用夏令时,可以通过d.year=2020来访问时间列表

4.3 取得数值(number)格式的时间值

time=os.time()        --返回一个标准的number(数值)格式的时间值

注:os.time()返回的时间是以秒为单位的。
1.获取当前时间数值
例:

time=os.time();
print(time)           --1608022421

2.通过table参数指定时间,获取指定的时间数值
例:

local tab={year=2020,month=11,day=26,hour=10,min=25,sec=20,isdst=false}
print(os.time(tab))

输出结果:

1606386320

4.4 获取列表格式的时间值

tab=os.date("*t",time)

将一个数值格式的时间转换为字符串或者列表(第一个参数指定返回的格式,第二个参数指定一个时间数值)
1.获取当前时间的table格式

tab=os.date("*t")
print(tab)
for k,v in pairs(tab) do
    print(k,v)
end

输出结果:

table: 0x12fe720
min	21
sec	57
month	12
yday	352
wday	5
year	2020
day	17
hour	2
isdst	false

2.通过时间数值,获取指定时间的table格式

local tab=os.date("*t",7852136945)
 print(os.time(tab))

输出结果:

7852136945

4.5 获取时间的字符串格式

tab=os.date(format,time)

1.获取当前时间的字符串格式
例:

str=os.date("*x")
print(str)                       --*x

2.通过时间数值,获取指定时间的字符串格式
例:

str=os.date("*x",1234589621)
print(str)                     --*x

str=os.date("%x",1234589621)
print(str)                     --02/14/09

3.获取时间的指定部分字符串格式
例:

str=os.date("%x")
print(str)                     --12/17/20

4.6 计算时间值间隔

int =os.difftime(t2,t1)             --t2,t1都是数值格式的时间值

例:

local tab={year=2020,month=11,day=16,hour=10,min=25,sec=20,isdst=false}
t1=os.time(tab)
tab.day=tab.day+1;
t2=os.time(tab)
int=os.difftime(t2,t1);
print(int.."秒时间差")       --86400.0秒时间差

4.7 系统时钟

os.tick():读取系统时钟,以毫秒为单位,表示从系统启动到当前时刻所过去的毫秒数
os.clock():读取系统时钟,以毫秒为单位,表示从系统启动到当前时刻所过去的秒数

print(os.clock())      --0.000966

注:因为内部实现的差异,所以os.tick()与os.clock()返回值并不完全一致

4.8 os.time()

1.不带参数(返回当前计算机时钟至1970年1月1日8时0分0秒的秒数数值)

print(os.time())      --1608173284

2.带参数

print(os.time{year=2020,month=11,day=26,hour=10})    --1606384800
print(os.time())      --1608173436

注:带参数的year,month,day 三个参数必须要写,其他未写则默认为12:00:00

4.9 os.date()

1.不带参数

print(os.date)      --function: 0x422600
print(os.date())    --Thu Dec 17 02:53:33 2020

2.第一个参数
格式化字符串:如*t,%d 等

print(os.date('%X'))        --02:59:00     //返回格式为小时:分钟:秒数
print(os.date('%x'))        --12/17/20    //返回格式为月份/日期/年份

3.第二个参数
时间的数字

print(os.date("%x",9812365421))      --12/10/80