Lua_表结构_007

在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

扩展

扩展:如果表的valuefunction,遍历表并执行每一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值