table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下:
(1) table 是一个“关联数组”,数组的索引可以是数字或者是字符串;
(2) table 的默认初始索引一般以 1 开始;
(3) table 的变量只是一个地址引用,对 table 的操作不会产生数据影响;
(4) table 不会固定长度大小,有新数据插入时长度会自动增长;
(5) table 所有索引值都需要用 “[“和”]” 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引;
(6) table 所有元素之间,总是用逗号 “,” 隔开;
lua提供了一些辅助函数来操作table,例如insert、remove等。
1、table.insert and table.remove
table.insert将一个元素插入到指定位置:。
举例1:
t = {1, 2, 3}
table.insert(t, 1, 4}
t的结果将是{4, 1, 2, 3}
举例2:
t={};
table.insert(t,"a");
table.insert(t,"b");
table.insert(t,"c");
结果是:
{
1 : a
2 : b
3 : c
}
insert的第二个参数是可以省略的,这样就会插入到数组的最后,从而不必移动其他元素。
同样地,table.remove是从数组中移除(并返回)一个元素,table.remove(t,1)将移除t中下标是1的元素,如果不指定移除位置,则移除最后一个。
2、table.sort()
另一个有用的函数是sort,对数组进行排序,如果没有提供排序函数,默认是<操作。这里不仅仅是数,对字符串也有效。
举例1:
a = {1,3,2,6,4,8,7,5} print('排序前:',a)
table.sort(a) print('排序后:',a)
结果:
排序前:
{
1 : 1
2 : 3
3 : 2
4 : 6
5 : 4
6 : 8
7 : 7
8 : 5
}
排序后:
{
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 8
}
3、table.concat() 连接table的元素
格式:table.concat(table, sep, start, end)
concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长。
举例:
spring = {"众里寻他千百度", "蓦然回首", "那人却在灯火阑珊处"}
print('一:',table.concat(spring, ","))
print('二:',table.concat(spring, ",", 1, 2))
print('三:\n',table.concat(spring, "\n", 1, 3))
num = {1, 2, 3, 4, 5, 6}
print('大小比较:',table.concat (num ,"<"))
结果如下:
一: 众里寻他千百度,蓦然回首,那人却在灯火阑珊处
二: 众里寻他千百度,蓦然回首
三:
众里寻他千百度
蓦然回首
那人却在灯火阑珊处
大小比较: 1<2<3<4<5<6
4、table.getn()
含义:返回table中元素的个数
举例:
t1 = {1, 2, 3, 5}
print(getn(t1))
结果:4
6、table.pack()和table.unpack()
table.pack函数是获取一个索引从 1 开始的参数表 table,并会对这个 table 预定义一个字段 n,表示该表的长度。
举例:
t = table.pack("test", "param1", "param2", "param3")
print(t)
结果:
{
1 : test
2 : param1
3 : param2
4 : param3
n : 4
}
table.unpack函数用于返回 table 里的元素,用法:table.unpack(table, start, end),其中参数 start 是开始返回的元素位置,默认是 1,参数 end 是返回最后一个元素的位置,默认是 table 最后一个元素的位置,参数 start、end 都是可选
举例:
t = {"Lua", "C++", "Python", "Java"}
print('(1):\n',t)
print('(2):',table.unpack(t))
a, b, c, d = table.unpack(t)
print('(3):',b)
print('(4):',a, b, c, d)
print('(5):',table.unpack(t, 2))
print('(6):',table.unpack(t, 2, 3))
结果如下:
(1):
{
1 : Lua
2 : C++
3 : Python
4 : Java
}
(2): Lua C++ Python Java
(3): C++
(4): Lua C++ Python Java
(5): C++ Python Java
(6): C++ Python
7. next函数,返回下一索引和下一索引对应的值。同时,next(tab)可以判断tab是否为空
local tab ={1,3,4}
if next(tab) then
print(next(tab, 1))
end
输出:
2 3