Lua 数据类型 —— 表

本文详细介绍了 Lua 语言中的表数据类型,包括表的元素(键和值)、获取元素的方法、表构造器的使用、表长度的计算、遍历方式、安全操作符以及标准库中的表操作,如 insert、remove、move 和 sort。重点讨论了表在序列处理和作为结构体使用时的特性和注意事项。
摘要由CSDN通过智能技术生成

一、简介

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

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

Lua 不会进行隐藏拷贝或创建新表,操作的都是指向表的指针。

二、元素

1、键

表的键可以具有不同的类型,并且可以按需增长容纳新的元素

如果 table 是一个序列,则下标是从 1 开始,切记不是从 0 开始。

不能用 nil 作为键,否则会抛 table index is nil 错误

2、值

表的值可以通过赋值 nil 进行删除原有的项

3、获取元素

第一种: table[key]

类似 java 、 kotlin 的 map 取值 ,如果 key 对应的值并不存在,则返回 nil

第二种: table.key

这种取值等价于 table[“key”] ,记得这里是字符串,而不是 table[key]

table[key] 和 table.key 区别

两种方式从使用的角度来说是没有任何的区别

从语义上说,table[key] 表示表可以使用任意字符串作为键,table.key 表示表是被当作结构体使用,表实际上由固定的,预先定义的键组成集合

k = "jiang"
a = {
   }
a[k] = 28
a[29] = "xiao"

-------------
-- 这里的 a 表有以下内容
-- "jiang" --> 28
-- 29      --> "xiao"
-------------

print(a[k])         --> 28
print(a.k)          --> nil         a.k 相当于 a["k"],所以就没有值
print(a.jiang)      --> 28          a.jiang 相当于 a["jiang"]

4、数值作为键

任何能够被转换为整型的浮点数都会被转换成整型数(和之前数值一章的分享不谋而合)

c = {
   }
c[2.0] = 10
print(c[2])     --> 10 

三、表构造器

无论用哪种构造的表,都可以用 nil 赋予到对应的 key 删除对应的值。

空构造器

table1 = {
   }

列表式

这种方式运行速度更快一点(相比于记录式),因为能够提前判断表大小。键会是从 1 开始往上递增的值。

-- 列表式,键会是从 1 开始往上递增的值
table2 = {
    "Jiang", "peng", "yong", }   -- 最有的逗号是合法的,但不会被当作元素

--> 表结构
--> 1 -- "Jiang"
--> 2 -- "peng"
--> 3 -- "yong"

记录式

key 值会被当作字符串使用,例如下面的 a key,最终形态是 “a” ,所以可以使用 table3.a 。

table3 = {
    a = "1", b = 20, c = "3" }
print("table3 length: " .. #table3)         --> table3 length: 0        -- 因为 lua 表并不会进行维护长度,只会记录序列的下标作为表的长度
print(table3.a, table3["b"], table3.c)      --> 1	20	3

--> 表结构
--> "a" -- "1"
--> "b" -- 20
--> "c" -- "3"

混合两种

混合使用并不会有冲突,列表式的记录会从下标为 1 开始累加,记录式则还是继续使用自己的 key 。

table4 = {
    name = "江澎涌", {
    170, "cm" }, age = 28, {
    "专业", "软件工程" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值