Lua 数据结构

来源:互联网 发布:过期未注册域名查询 编辑:程序博客网 时间:2024/05/01 04:55

数组

虽然Lua可以自定义下标,但在Lua中习惯上数组的下标从1开始,Lua的标准库与此习惯保持一致,因此如果你的数组下标也是从1开始你就可以直接使用标准库的函数,否则就无法直接使用。

a={};for i=1,1000 do    a[i]=0;endprint("数组 a 的长度:" .. #a);  --计算长度操作符 #squares={1,2,3,4,5}; --在一个表达式中初始化数组

矩阵与多维数组

在Lua中,有两种方式来表示矩阵。第一种是使用一个”数组的数组”,也就是说,一个table中的每个元素是另一个table。例如:

mt={}for i=1,N do   mt[i]={}     --由于在Lua中table是一种对象,因此在创建矩阵时,必须显示地创建每一行。   for j=1,M do      mt[i][j]={}    endend

第二种方式是将两个索引合并为一个索引。例如:

m={}for i=1,N do   for j=1,M do     m[(i-1)*M+j]= 0;    endend

链表

由于table是动态的实体,所以在Lua中实现链表是很方便的。每个节点以一个table来表示,一个”链接”只是节点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  

队列与双向队列

List={};function List.new()    return {first=0,last=-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--测试1list=List.new();  --创建一个队列for i=1,10,2 do   --向队列头一次插入value 1,3,5,7,9 他们的下标为-1,-2,-3,-4,-5   List.pushfirst(list,i);endfor i=-5, #list do   --first 是从0 开始的,压入栈的时候 第一个元素  first = -5   print(list[i]) end--测试2for i=1,10,2 do  --向队列尾部依次插入value,下标是从1开始。   List.pushlast(list,i);endfor i=0, #list do   --因为last 是从-1 开始的,压入栈的时候 第一个元素  last = 0   print(list[i]) endprint(List.popfirst(list)); --9  队列头部插入的最后一个值为9print(List.poplast(list));  --9  队列尾部插入的最后一个值为9

集合

使用字符串来搜索这个数组,只需用该值来索引table,并查看结果是否为nil。在Lua中,将集合元素作为索引放入一个table中。

reserved = {  ["while"] = true, ["end"] = true,  ["function"] = true, ["local"] = true,  }  for k,v in pairs(reserved) do      print(k,"->",v)  end  

若要使初始化过程变得更清晰,可以使用以下代码来创建集合:

function Set(list)   local set={}   for _,l in ipairs(list) do        set[l]=true     endreturn setreserved=Set{"while","end","function","local",}
0 0
原创粉丝点击