table是lua中的一种十分强大的数据类型,也有点类似于数组,但是在这种类型中你可以使用除了nil以外的任意一种数据类型来作为索引或者元素。
他的定义很简单,用{}包含你的元素即可,注意用 [ ] 包含住你的索引(如果索引类型是字符串可以去掉)。
例如:
T1 = {} --定义一个空表
--可以像数组来赋值
T1[1] = 10
print(T1[1])
--可以定义二维或多维表
T1["player1"] = {hp = 100,atk = 10,name = "name"}
--也可以写成T1["player1"] = {["hp"] = 100,["atk"] = 10,["name"] = "name"}
print(T1["player1"]["hp"])--100
print(T1["player1"]["name"])--name
--获取元素也可以表示为
print(T1.player1.hp)--100
print(T1.player.name)--name
看着好像很乱,如果我们加上一点小小的书写规范,如每个元素占一行。字符串索引去掉[" "],例如上面的表可以写成
T1 = {
10,
player1 = {
hp = 100,
atk = 10,
name = name
}
}
print(T1[1])--10
print(T1.player1.hp)--100
print(T1.player.name)--name
这样就美观多了,可以发现我们第一个元素是没有索引的,对于没有索引的元素,lua会从1开始按顺序自动填入数字作为索引(注意不是从0开始!)。例如我们在T1中加入两个元素
T1 = {
10,
player1 = {
hp = 100,
atk = 10,
name = "name",
},
[20] = "abc",
"第二"
}
print(T1[1])--10
print(T1[20])--20
print(T1[2])--第二
其中T1[20]是我们用数字指定的索引,而T1[1]和T1[2]则是因为没有指定索引自动按顺序填入的。可以看出这个顺序是按没有指定索引的元素数量来设置的,与指定索引了的元素无关。
那如果我们先指定了 2 这个索引,又有两个以上的元素没有指定索引呢?
T1 = {
10,
player1 = {
hp = 100,
atk = 10,
name = "name",
},
[2] = "abc",
"第二"
}
print(T1[2])--第二
可以看出T1[2]被重新赋值为 “第二”,因此已经指定了数字索引后,自动填入的数字索引并不会绕开这个数字,而是做一个重新赋值的操作。