lua数据结构

lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础。其他语言提供的数据结构,如数组、记录、线性表、队列、集合等,在lua中都可以通过table来表示。

数组:使用整数来索引table即可在lua中实现数组。因此,数组没有一个固定的大小,可以根据需要增长。通常,当初始化一个数组时,也就间接地定义了它的大小。例如在执行了以下代码后,任意对字段范围1-10001之外的访问都会返回一个Nil,而不是0:

a ={}
for i=1,1000 do
   a[i]=0
end
a ={}
for i=1,1000 do
   a[i]=0
end
矩阵与多维数组:

在lua中,有两种方式来表示矩阵。第一种是使用一个“数组的数组”,也就是说,一个table钟的每个元素是另一个table。例如,使用以下代码来创建N*M的零矩阵:


m ={}
for i =1,N do
mt[i]={}
for j=1,M do
mt[i][j]=0
end
end

带来灵活性创建三角矩阵:


m ={}
for i =1,i do
mt[i][j]=0
end
end

链表:由于table是动态的实体,所以在lua中实现链表是很方便的。每个结点以一个table来表示,一个连接只是结点table中的一个字段,该字段包含了对其他table的引用。例如,要实现一个基础的列表,其中每个结点具有两个字段:next和value,先创建一个用作列表头结点的变量:

--先创建一个用作列表头结点的变量
list = nil
--在表头插入一个元素,元素值为value
list ={next = list,value = v}

--遍历此列表:
local l = list
while l do
l =l.next
end

lua中队列的实现:


List ={}
function List.new()
return {first=0,lat =-1}
end
function List.pushfirst(list,value)
local first = list.first-1
list.first = first
list[first]=value
end
function list.pushlast(list,value)
local last = list.last+1
list.last = last
list[last]=value
end
function list.popfirst(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.poplast(list) local last = list.last if list.first >last then error("list is empty") end local value = list[last] list[last]= nil list.last = last-1 return value end

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...