https://www.cnblogs.com/daochong/p/7363649.html
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?
}?
举例2:
name = {"you","me","him","bill" }
结果如下:?
1 bill?
2 him?
3 me?
4 you?
%———————————————————————————————————-%
3、table.concat()?
格式:table.concat(table,sep,start,end)?
concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素,元素间以指定的分隔符(sep)隔开。除了table外,其他的参数都不是必须的,分隔符的默认值是空字符,start的默认值是1,end的默认值是数组部分的总长。?
举例:
spring = {"众里寻他千百度","蓦然回首","那人却在灯火阑珊处"} print(‘一:‘,table.concat(spring,",")) print(‘二:‘,",1,2)) print(‘三:n‘,"n",3)) num = {1,5,6} print(‘大小比较:‘,table.concat (num,"<"))
结果如下:?
一: 众里寻他千百度,蓦然回首,那人却在灯火阑珊处?
二: 众里寻他千百度,蓦然回首?
三:?
众里寻他千百度?
蓦然回首?
那人却在灯火阑珊处?
大小比较: 1<2<3<4<5<6?
%———————————————————————————————————-%
4、table.maxn()?
含义:table.maxn()函数返回指定table中所有正数key值中最大的key值。 如果不存在key值为正数的元素,则返回0。 此函数不限于table的数组部分。?
举例1:
cc = { 0.2654,0.0109,0.3575,0.8749,0.4324,0.1932} print(cc) key = table.maxn(cc) print(‘最大的key值为:‘,key)
结果:?
{?
1 : 0.2654?
2 : 0.0109?
3 : 0.3575?
4 : 0.8749?
5 : 0.4324?
6 : 0.1932?
}?
最大的key值为: 6?
举例2:
apple = {"a","p",[5]="e"} print(table.maxn(apple)) duck = {[-2]=3,[-1]=0} print(table.maxn(duck))
结果如下:?
5?
0?
%———————————————————————————————————-%
5、table.getn()?
含义:返回table中元素的个数?
举例:
t1 = {1,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,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,d) print(‘(5):‘,table.unpack(t,2)) print(‘(6):‘,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