Lua数据结构之Table

本文介绍了Lua中Table的创建,包括三种方法,并探讨了Table作为列表的特殊形式,强调了Table的匿名性和索引特性。文章还讨论了遍历Table的pairs与ipairs方法,以及在含有nil时计算列表长度的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建table我目前知道三种方式

方法一:

a = {}
a["x"] = 10
a[2.0] = "great"
a[-1]              	--> 值为nil
a[2] = nil 		--> 删除a[2.0]

方法二:

days ={x = 10, y = 20, "Sunday", "Monday", "Tuesday", {"Wednesday", "Thursday", "Friday", "Saturday"}}
days[1]  	--> Sunday
days[4] 	--> {"Wednesday", "Thursday", "Friday", "Saturday"}
a.x		 	--> 10
a.y		 	--> 20

默认索引从1开始

方法三:

a = {["+"] = "add", [-1] = "-1"}		--> 

可以使用任意类型作为索引(可转换为整形的浮点型会被转换)
感觉有点像是字典?
表永远是匿名的,即a只是指向表的引用对象,并非表本身。
eg:

b = a
b["x"] = -10
a["x"]   --> 10
a = nil  --只有b指向表

若无引用指向表,Lua的垃圾收集器最终给会自动释放其对应内存。

与字典不同来了:
当把表当作结构体使用时, 可以把索引当作成员名称使用。
eg:

a.x = 10			-- 等价于a["x"] = 10

两种形式可自由混用(但后者一般用于表的键为预先定义的、固定的情况)。

注意:
不要混淆a.x和a[x]
eg:

x = "y"
a[x] = 10 			-- 等价于a["y"] = 10和a.y = 10

table的一种特殊形式为列表(索引为整型)

eg:

a = { 1, 3, 2, 4 }

计算列表的长度有一个坑就是有nil的列表长度该如何计算的问题:
eg:

a = { 1, nil, 3, 4 }
print(#a)				--> 4

a = { 1, nil, 3, 4, nil }
print(#a)				--> 1

关于这个长度计算方法我也暂时还没理解,推荐的做法是在含有nil的列表中显式地保存列表的长度而不使用#操作符计算。

遍历表的方式有如下几种

  • pairs
    eg:
t = { 10, print, x = 12, k = "hi" }
for k, v in pairs(t) do
	print(k, v)
end

输出为:
输出
书上说pairs遍历table顺序是随机的(虽然我每次输出都是顺序的)。

  • ipairs

遍历列表时可使用ipairs,输出为顺序的(这个确实,但是如果用iparis遍历普通table只会按序输出连续的整数键)。

eg:

 t = { [2] = 10, print, [4] = 12, k = "hi" }
 for k, v in ipairs(t) do
     print(k, v)
 end

输出为:
输出

  • for
    for循环当然也是可以滴
 t = { 10, print, 12, "hi" }
 for k = 1, #t do
    print(k, t[k])
 end

输出为:
输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值