标签:
Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础。如数组、记录、线性表、队列和集合等,在Lua中都可以通过table来表示。
1、数组
使用整数来索引table即可在Lua中实现数组。因此,Lua中的数组没有固定的大小,如:
a = {} for i = 1, 1000 do a[i] = 0 end print("The length of array ‘a‘ is " .. #a) --The length of array ‘a‘ is 1000
在Lua中,可以让任何数作为数组的起始索引,但通常而言,都会使用1作为其起始索引值。
而且很多Lua的内置功能和函数都依赖这一特征,因此在没有充分理由的前提下,尽量保证这一规则。
下面的方法是通过table的构造器来创建并初始化一个数组的,如:
squares = {1, 4, 25} function wyq( ... ) for i=1,select(‘#‘,...) do local temp = select(i,...) if(type(temp)=="string") then print("这是字符串 = "..temp) elseif(type(temp)=="table") then for j=1,table.maxn(temp) do print(temp[j]) end else print("这是数字 = "..temp) end end end wyq(squares,2,"hello") --输出结果 --1 --4 --25 --这是数字 = 2 --这是字符串 = hello
2、二维数组
在Lua中我们可以通过两种方式来利用table构造多维数组。其中,第一种方式通过“数组的数组”的方式来实现多维数组的,即在一维数组上的每个元素也同样为table对象,如:
mt = {} function eeeee( ... ) local N =select(1,...) local M =select(2,...) for i = 1, N do mt[i] = {} for j = 1, M do mt[i][j] = i * j end end end eeeee(3,4) for i=1,table.maxn(mt) do local len = table.maxn(mt[i]) for j=1,len do print(mt[i][j]) end end
第二种方式是将二维数组的索引展开,并以固定的常量作为第二维度的步长,如:
mt = {} for i = 1, N do for j = 1, M do mt[(i - 1) * M + j] = i * j end end
3、链表
由于table是动态的实体,所以在Lua中实现链表是很方便的。其中,每个结点均以table来表示,一个“链接”只是结点中的一个字段,该字段包含对其它table的引用,如:
list = nil for i = 1, 10 do list = { next = list, value = i} end local l = list while l do print(l.value) l = l.next end --10 9 8 7 6 5 4 3 2 1
标签:
原文地址:http://www.cnblogs.com/MrZivChu/p/lua3.html