Lua中table的几种构造方式详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lua中table的⼏种构造⽅式详解
之前对于Lua的研究都是纸上谈兵,没有真正的项⽬练⼿,现在公司的项⽬基本上都是⽤Lua开发,是时候补充⼀下我那蹩脚的Lua知识了。
基础数据类型、表达式、循环结构什么的我就不说了,这么简单的东西说了也要被⼤家喷。
今天我想说说table的⼏种构造⽅式。
0.Lua调试⼯具——LuaEditor
⾸先,如果你是第⼀次接触Lua,请补充⼀下Lua的最基本之中的基础语法(⼩若:O O!),然后下载⼀个LuaEditor⼯具,⽤来查看Lua执⾏效果,当然也可以调试,本篇内容不解释这个⼯具。
可以百度⼀下这个⼯具。
1.什么是table?
table是Lua最复杂最强⼤的数据结构,Lua本⾝并不是⾯向对象语⾔,但是对⾯向对象中毒⽐较深的程序员,可以借助table”完美”地模拟⾯向对象编程。
最简单地,我们可以把table理解为数组,最复杂的,我们可以把table理解为”世间万物”,因为它可以创造出很多你想象不到的东西。
⼀个字,⾃由度⾮常⼤~!(⼩若:⼀个字,你妹~!)
2.如何创建⼀个table?
创建table是⼀件很复杂的事情,不知道⼤家顶不顶得住,试试看,如下:
复制代码代码如下:
local a = {}
这样就创建了⼀个table了。
(⼩若:噗,真够复杂的…啊,你妹啊,复杂你个头!)
3.如何初始化⼀个table
嗷,虽然创建table已经很复杂了,更复杂的还在后⾯,怎么初始化table?看看下⾯的代码:
复制代码代码如下:
local a = {["x"] = 12, ["mutou"] = 99, [3] = "hello"}
print(a["x"]);
在LuaEditor中创建⼀个lua⽂件,输⼊以上代码,保存,然后按F5运⾏,我们将看到输出窗⼝输出了⼀个数字:12。
这挺神奇的,感觉就像是在定义数组,不是吗?
table间的元素⽤逗号分隔,["x"] = 12代表构造⼀个table元素,下标为”x”,值为12。
(⼩若:为⽑数组下标可以是字符串?)
嗷~!我就等旁⽩问这个问题,旁⽩你笨蛋啊,我只是说table像数组,我没有说它就是数组,table⽀持⼏乎是所有类型的下标,包括函数。
(⼩若:。
以后我不会中计了,喵…)
4.有更简洁的⽅式
这种初始化⽅式看起来太复杂了,有没有简单点的?看看下⾯的代码:
复制代码代码如下:
local a = {x = 12, mutou = 99, [3] = "hello"}
print(a["x"]);
运⾏结果仍然是输出12,也就是说,对于字符串下标,我们可以省略⽅框和双引号,但是数字下标不可以,千万不要搞混了。
但是,a["x"]这种调⽤⽅式也很烦⼈不是吗?程序员都很懒的,所以Lua⽀持⼀下这种⽅式的调⽤:
复制代码代码如下:
local a = {x = 12, mutou = 99, [3] = "hello"}
print(a.x);
输出结果仍然是12,也就是说,对于字符串下标,可以直接⽤a.x的形式调⽤,也是省略了⽅框和双引号,初始化和调⽤⽅式的规则⼀样,这样⼤家就不会搞混了,记住,是字符串下标才这么做。
记住,是字符串下标才这么做。
记住,是字符串下标才这么做。
(⼩若:你再说⼀句试试,我保证以后不帮你吐槽。
)
5.想要默认数字索引怎么办?
如果说,⼤家习惯了数组,⽤数字下标,⼜不想⾃⼰⼀个个数字地定义,⽐如:
复制代码代码如下:
local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90}
没关系,Lua⼜为爱偷懒的程序员提供了⼀招,如下:
复制代码代码如下:
local a = {12, 43, 45, 90}
print(a[1]);
看看a[1]输出的值是不是12?(⼩若:但是12的下标应该是0啊,数组下标是从0开始计算的)
再⼀次警告旁⽩,table类似数组,但它绝对不是数组。
table默认的第⼀个索引下标是1,并且很多相关的函数也假设table的第⼀个索引下标为1,所以⼤家最好遵守这个规则。
6.更强⼤的应⽤之table的table
table什么都能放,当然也能放table了,如下:
复制代码代码如下:
local a = {
{x = 1, y = 2},
{x = 3, y = 10}
}
我们定义了⼀个table,命名为a,table有两个元素,分别是两个没有名字的table,根据第5条所说的规则,没有显⽰指定下标,那Lua就会默认给table的元素赋予下标(从1开始)。
因此,a的第⼀个元素就是{x = 1, y = 2},调⽤a的第⼀个元素的⽅式为:a[1]
由于a[1]⼜是⼀个table,所以,再次调⽤table的x下标的值:a[1].x
这样就OK了。
7.更强⼤的应⽤之函数下标
我们最后来试试更好玩的,⽤⼀个函数当table的下标:
复制代码代码如下:
function test()
print("Hello Table");
end
local a = {[test] = 1}
print(a[test]);
定义了⼀个函数test,然后⽤test作为下标定义了table的⼀个元素,值为1。
这很奇怪不是吗?但是有时候这样确实很有⽤,这⾥暂时不解释。
OK,关于table的构造⽅式,暂时说这么多,有点累了,晚安。