Lua教程(七):数据结构详解
Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础。如数组、记录、线性表、队列和集合等,在Lua中都可以通过table来表示。
1.数组:
使用整数来索引table即可在Lua中实现数组。因此,Lua中的数组没有固定的大小,如:
a={} fori=1,1000do a[i]=0 end print("Thelengthofarray'a'is"..#a) --Thelengthofarray'a'is1000
在Lua中,可以让任何数作为数组的起始索引,但通常而言,都会使用1作为其起始索引值。而且很多Lua的内置功能和函数都依赖这一特征,因此在没有充分理由的前提下,尽量保证这一规则。下面的方法是通过table的构造器来创建并初始化一个数组的,如:
squares={1,4,9,16,25}
2.二维数组:
在Lua中我们可以通过两种方式来利用table构造多维数组。其中,第一种方式通过“数组的数组”的方式来实现多维数组的,即在一维数组上的每个元素也同样为table对象,如:
mt={} fori=1,Ndo mt[i]={} forj=1,Mdo mt[i][j]=i*j end end
第二种方式是将二维数组的索引展开,并以固定的常量作为第二维度的步长,如:
mt={} fori=1,Ndo forj=1,Mdo mt[(i-1)*M+j]=i*j end end
3.链表:
由于table是动态的实体,所以在Lua中实现链表是很方便的。其中,每个结点均以table来表示,一个“链接”只是结点中的一个字段,该字段包含对其它table的引用,如:
list=nil fori=1,10do list={next=list,value=i} end
locall=list whileldo print(l.value) l=l.next end