关于table的文字说明我引用了lua程序设计的一些语句来归纳表述:数组
table类型实现了“关系数组”。“关系数组”是一种具备特殊索引方式的数组。不只能够经过整数来索引他,还可使用字符串活着其余类型的值(除了nil)来索引他。此外,table没有固定大小,能够动态的添加任意数量的元素到一个table中。lua
在lua中,table既不是“值”也不是“变量”,而是“对象”,能够将一个table想象成一种动态分配的对象,程序仅持有一个对他们的引用(或指针),lua不会暗中产生table的副本或者建立新的table。
spa
引用完别人的说明以后,如今来看一下一些例子:
设计
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for i=1,#testTable do print(testTable[i]) end
输出为:指针
1 2 hi 5 6 8
config = {1,2,3}和k="hello"去哪里了呢?待会在分析这个问题,接下来再看一个实例:
code
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for i,value in ipairs(testTable) do print("i = " .. i .. ", value = " .. value) end
他的输出为:对象
i = 1, value = 1 i = 2, value = 2 i = 3, value = hi i = 4, value = 5 i = 5, value = 6 i = 6, value = 8
config = {1,2,3}和k="hello"也并无输出。再看第三个实例:索引
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for k,v in pairs(testTable) do print(k,v) end
输出为:ip
local testTable = { 1, 2, "hi", config = {1,2,3}, 5, 6, k = "hello", 8 } for k,v in pairs(testTable) do print(k,v) end
这时候是把全部的都输出了,可是有没有发现,输出顺序有点变化了,字符串
由于config = {1,2,3}的索引为config,k = "hello"的索引为k,而其余的都有lua给予的天然索引,好比1的索引为1,2的索引为2,5的索引为3,输出的时候是先把天然索引的所有输出,接着在根据在table的顺序进行一个个的输出。
为何第一个实例和第二个实例只输出了天然索引的值,而忽略了其余的?其实第一个实例和第二个实例实际上时同样的,只是表现形式不同,所以咱们只须要说明第二种与第三种的区别便可:
pairs会遍历table的全部键值对,而ipairs就是固定地从key值1开始,下次key累加1进行遍历,若是key对应的value不存在,就中止遍历。所以咱们在遍历table的时候要根据本身的需求而选择一种