版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pg_dog/article/details/79538572
—————————————-array
a = {} –数组大小不确定,可动态增长
for i = 1,1000 do
a[i] = 0
end
–可以用构造器在创建数组的同时初始化数组:
a = {1,2,3,4,4,5,6}
—————————————-矩阵和多维数组
–表示矩阵的方式1:数组的数组
mt = {}
for i = 1,M do
mt[i] = {} --显式的创建一个table
for j = 1,N do
mt[i][j] = 0
end
end
–表示法2:
mt = {}
for i = 1,M do
for j = 1,N do
mt[i*M + j] = 0
end
end
—————————————链表
--根节点
list = nil
--在链表开头插入一个值为v的节点
list = {next = list,value = v}
--遍历链表
local l = list
while l do
print(l.value)
l = l.next
end
—————————————队列和双向队列
--为了避免污染全局命名空间,将其放入一个名为list的table中:
List = {}
function List.new ()
return {first = 0,last = -1}
end
–实现插入和删除操作
function List.pushleft(list,value)
local first = list.frist - 1
list.first = first
list[first] = value
end
function List.pushright(list,value)\
local last = list.last + 1
list.last = last
list[last] = value
end
function List.popleft(list)
local first = list.first
if first > list.last then
error("list is empty")
end
local value = list[first]
list[first] = nil
list.first = first + 1
return value
end
function List.popright(list)
————————————–集合和包
–想列出一段源代码中出现的所有标识符,你需要过滤掉那些语言本身的保留字
--lua中将一个集合的元素作为下标存放在table中,下面不需要查找table,只需测试给定元素在table中所对应的值是否为nil
function Set(list) --构造集合
local set = {}
for _,l in ipairs(list) do
set[l] = true
end
return set
end
reserved = Set{"while","for","end","local"}
for w in allwords() do
if reserved[w] then
--'w' is a reserved word
...
end
————————————–字符串缓冲
--table.concat函数可以将一个列表中的所有串合并
--Concat接受第二个可选的参数,代表插入的字符串之间的分隔符
local t = {}
for line in io.lines() do
table.insert(t,line)
end
s = table.concat(t,"\n") .."\n"
–io.lines迭代返回不带换行符的一行,concat在字符串之间插入分隔符,但是在最后一个字符串之后不会插入分隔符,因此需要在最后加上一个分隔符。最后一个连接操作复制了整个字符串,这个字符串可能很大。这时可以使用小技巧,插入一个空串。
table.insert(t,"")
s = table.concat(t,"\n")