首页 > 其他 > 详细

Lua3

时间:2015-09-10 16:03:34      阅读:206      评论:0      收藏:0      [点我收藏+]

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

Lua3

原文:http://www.cnblogs.com/MrZivChu/p/lua3.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!