Lua中表的使用

本文详细介绍了Lua中的表,包括表的使用、构造器、数组和队列的实现,以及遍历、安全访问和表标准库的功能。强调了表作为Lua的主要数据结构,可以使用任意类型作为索引,并探讨了表索引的相等性问题和效率问题。文章还讨论了如何创建和初始化表,以及数组和序列的表示和长度操作符的使用。此外,还涵盖了遍历表的迭代器和安全访问表元素的方法,以及table标准库中对列表和序列的常见操作函数。
摘要由CSDN通过智能技术生成

文章新地址
    表是Lua中最主要和强大的数据结果。使用表,Lua语言可以以一种简单、统一且高效的方式表示数组、集合、记录和其他很多数据结果。Lua语言也使用表来表示包和其他对象。当调用函数math.sin时,我们可能认为是“调用了math库中函数sin”;而对于Lua语言来说,其实际含义是“以字符串sin”为键检索表math。
    Lua语言中的表本质上是一种辅助数组。这种数组不仅可以使用数值作为索引,也可以使用字符串或其他任意类型的值作为索引(nil除外)。
    我们使用构造器表达式创建表,其最简单的形式是{}:

> a = {
   }			--创建一个表然后用表的引用赋值
> k = "x"
> a[k] = 10 		-- 新元素,键是"x",值是10
> a[20] = "great"	-- 新元素,键是20,值是"great"
> a["x"]			-- 10
> k = 20
> a[k]				-- "great"
> a["x"] = a["x"] + 1 -- 增加元素"x"的值
> a["x"]

表永远是匿名的,表本身和保存表的变量之间没有固定的关系:

> a = {
   }
> a["x"] = 10
> b = a					-- 'b''a'引用同一张表
> b["x"] = 20
> a["x"]				-- 20
> a = nil 				-- 只有'b'仍然指向表
> b = nil				-- 没有指向表的引用了

对于一个表而言,当程序中不再有指向它的引用时,垃圾收集器会最终删除这个表并重用其占用的内存。

表索引

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

> a = {
   }		-- 空的表
> -- 创建1000个新元素
> for i = 1 , 1000 do a[i] = 1 * 2 end
> a[9]			-- 18
> a["x"] = 10 	
> a["x"]		-- 10
> a["y"]		-- nil

请注意上述代码的最后一行:如同全局变量一样,未经初始化的表元素为nil,将nil赋值给表元素可以将其删除。
    当把表当做结构体使用时,可以把索引当作成员名称使用。因此,可以使用这种更加易读的方式改写前述示例的最后几行:

> a = {
   }
> x = "y"
> a[x] = 10 		--10放在字段"y"> a[x]				-- 10  字段"y"的值
> a.x 				-- nil  字段"x"的值(未定义)
> a.y				-- 10 字段"y"的值

    由于可以使用任意类型索引表,所以在索引表时会遇到相等性比较方面的微妙问题。虽然确实都能使用数字0和字符串"0"对同一个表进行索引,但这两个索引的值及其所对应的元素是不同的。同样,字符串"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平淡风云

您的打赏是我继续创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值