Lua程序设计 table(表)

     Table是Lua中主要数据结构机制,基于Table,能够以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其余数据结构。Table是没有固定大小的,能够动态地添加任意数量的元素到一个Table中。数组

      Lua中的table类型实现了“关联数组”。能够在“关联数组”中使用整数、字符串或其余类型的值(nil除外)来索引它。数据结构

      在Lua中,Table既不是“值”也不是“变量”,而是“对象”。能够将一个Table想象成一种动态分配的对象,程序仅支持有一个对它的引用(或指针),Lua不会暗中生成Table的副本或建立新的Table。能够经过“构造表达式”完成Table表的建立,最简单的构造表达式就是{}。函数

a = {}   --建立一个table,并将它的引用存储到a
k = "X"
a[k] = 10  ---新条目,key = "X" , value = 10
print(a["X"])    --->10

a[20] = "great"  -- 新条目,key = 20, value = "great"
k = 20
print(a[k])      -->"great"
a["X"] = a["X"] + 1
print(a["X"])   --- > 11

  Table 永远是"匿名的",一个持有Table的变量与Table自身之间没有固定的关联性。lua

a = {}
a["X"] = 10
b = a          --- b与a引用了同一个Table。
print(b["X"])  --- 10
b["X"] = 20
print(a["X"])   --- 20
a = nil         --如今只有b还在引用Table
b = nil         --再也没有对Table的引用了。 
一个Table的多个引用在对Table进行修改,修改的是全局的概念。当一个程序再也没有一个Table的引用时,Lua的垃圾收集器最终会删除该Table,并复用它的内存。

    全部Table均可以有不一样类型的索引来访问value值,当须要容纳新条目时,Table会自动增加。spa

a = {} --空的table
-- 建立1000个新条目
for i = 1, 1000 do a[i] = i*2 end
print(a[9])  --> 18
a["X"] = 10
print(a["X"]) -->10
print(a["y"]) -->nil  当table的某个元素没有初始化时,他的内容就是nil。另外能够像全局变量同样,将nil赋予table的某个元素来删除该元素。(Lua中,全局变量也是存储在一个普通的table中)

    为了表示一条记录,能够将字段名做为索引。lua中有“语法糖”的概念:指针

a["name"]  ==  a.name

    如果要表示一个传统的数组或线性表,只需以整数做为key来使用table便可。Lua中数组一般以“1”做为索引的起始值。code

     在Lua5.1中,长度操做符“#”用于返回一个数组或线性表的最后一个索引值!对象

     对于全部未初始化的元素的索引结果都是nil。Lua将nil做为界定数组结尾的标志。当一个数组有“空隙”时,即中间含有nil时,长度操做符会认为这些nil元素就是结尾标记。若是须要处理那些含有“空隙”的数组,可使用函数table.maxn,它将返回一个table的最大正索引数:索引

a = {}
a[10000] = 1
print(table.maxn(a))  ---》10000

    当对索引的实际类型不是很肯定时,能够明确地使用一个显示的转换:队列

i = 10 j = "10"  k = "+10"
a = {}
a[i] = "one value" 
a[j] = "another value" 
a[k] = "yet another value" 

print(a[j]) --->another value
print(a[k]) --->yet another value
print(a[tonumber(j)]) --->one value
相关文章
相关标签/搜索