Lua程序设计(五)

表(Table)示Lua语言中最主要的数据结构。Lua语言可以用表表示数组,集合,记录和其他很多数据结构,甚至当我们调用函数时,Lua语言实际上是以函数名为字符串去检索表。

表本质上是作为一种辅助数组(associative array)实现的,这种数组不但可以使用数值作为索引,也可以使用字符串或其他类型的值作为索引。

表示一种动态分配的对象,程序只能操作指向表的引用。

表索引

同一个表中存储的值可以具有不同类型的索引,并可以按需增长以容纳新的元素。

a = {}
for i = 1, 1000 do a[i] = i * 2 end
a[9] -- 18
a["x"] = 10
a["x"] --10
a["y"] --nil

未经初始化的表元素为nil,将nil复制给表元素可以将其删除。(实际上,Lua就是使用表来存储全局变量的)

表构造器

学习完如何利用索引去检索表,再来看Lua语言是如何构造表的。最简单的构造器是空构造器{},还可以使用记录是表的方法构造表。这两种构造方式是可以混用的。

polyline = {color = "blue",
            thickness = 2,
            npoints = 4,  
            {x = 0, y = 0}
}

使用这两种构造器需要注意不能使用负数索引初始化表元素

数组、列表和序列

通过表我们可以表示常见的数组和列表,仅需要整型作为索引即可。需要注意的是,Lua语言数组索引惯例是从1开始的。

当操作列表时我们往往想知道列表的长度。可以通过#操作符来获取序列的长度,序列即所有元素都不为nil的数组。

遍历表

Lua提供了pairs迭代器来遍历表中的键值对:

t = {10, print, x=12, k = "hi"}
for k, v in pairs(t) do
    print(k, v)
end
--> 1    10
--> k    hi
--> 2    function: 0x420610
--> x    12

可以看到由于内部的实现,使用pairs迭代器遍历表时出现的顺序是随机的,如果想按顺序进行遍历则应当适用ipairs迭代器。

另一种遍历的方法是使用数值型for循环

t = {10, print, 12, "hi"}
for k = 1, #t do
    print(k, t.k)
end


安全访问

诸如C#等一些编程语言提供了安全访问操作符,用于处理当结果是nil时不会产生异常, Lua已提供了这样的安全访问方式通过表达式(a or {}), 当a为nil时其结果是一个空表。

zip = ((( company or {}).director or {}).address or {}).zipcode

关于表标准库的一些函数将在后文介绍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值