在Lua中的table类似C#中的字典,其实就是一个key-value键值对的数据结构。
常用的方法
1 table.concat (table [, sep [, start [, end]]]):
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
2 table.insert (table, [pos,] value):
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
3 table.maxn (table)
指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了)
4 table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
5 table.sort (table [, comp])
对给定的table进行升序排序。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
【注意】第二种方式创建的时候键不可以是字符串,值可以是任意的数据类型
表的遍历
不管用何种方式创建table,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。
数组
在lua中通过整数下标访问表中的元素即可简单的实现数组。数组不必事先指定大小,大小可以随需要动态的增长。
例:
a = {} -- new array
for i=1, 4 do
a[i] = 0
end
a[5] = 1
for i,v in ipairs(a) do
print(i,v)
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
扩展
扩展:如果表的value为function,遍历表并执行每一个function
function fun()
end
t = {}
t["key1"] = fun
for k in pairs(t) do
t[k]()
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
注意事项
1、可以把这个类型看作数组;
2、可以用任意类型来做数组索引,除了nil;
3、所有元素之间,总是用”,”隔开;
4、所有索引值都需要用”[”和”]”括起来;如果是字符串还可以去掉引号和中括号;
6、在构造函数的最后的“,”是可选的,可以方便以后的扩展。如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编排。
表相关的函数
myTable = {"aa","bb","cc","ff","GG"}
--把表中所有数据连成一个字符串 适用于数组类型的表结构 不适用于字典类型的表结构
print("concat:" .. table.concat(myTable))
--在表中索引为3的位置插入一个数据
table.insert(myTable,3,"pp")
--默认是在表的末尾添加一个数据
table.insert(myTable,"yy")
print("insert:" .. table.concat(myTable))
--删除指定下标的元素
table.remove(myTable,4)
print("remove:" .. table.concat(myTable))
--如果不指定删除的下标 默认删除表的末尾
table.remove(myTable)
print("remove:" .. table.concat(myTable))
--按照ASCII码的顺序排序
table.sort(myTable)
print("sort:" .. table.concat(myTable))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
运行结果:
concat:aabbccffGG
insert:aabbppccffGGyy
remove:aabbppffGGyy
remove:aabbppffGG
sort:GGaabbffpp
面向对象实现
Enemy={}
local this=Enemy;
Enemy.hp=100;
Enemy.speed=50;
Enemy.move=function()
print("move")
end
function Enemy.attact()
print("attact")
print(this.hp)
end
Enemy.attact();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14