lua中table须要注意的一点东西

关于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的时候要根据本身的需求而选择一种

相关文章
相关标签/搜索