Lua中的table.与table[]的使用

本文探讨了Lua中两种索引table值的方法:和table[].前者常用于字符串索引,后者允许使用变量作为索引。在特殊情况下,如tb={x=1,y=1},直接赋值与table[].语法的差异可能导致混淆,需注意它们在初始化和索引上的不同行为。" 40586173,990649,Android闹钟事件处理:停止与小睡,"['Android开发', 'BroadcastReceiver', '闹钟服务', '事件响应']

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

在Lua中有两种方式可以索引到table中的值,分别是.[];这两种方法都可以直接索引到表里面的值,但是还是有一些区别的,往下看进行分析

若当前有一个表tb,表的格式如下

tb = {["x"]=1,["y"]=2}

一、使用table.进行索引,这种是表示使用字符串x作为索引tb表里面的值;这是一般情况下的索引方式

print(tb.x,tb.y)
--此时 tb.x == tb["x"]
--	  tb.y == tb["y"]


二、使用table[]进行索引,这种是表示使用一个参数进行索引表中内容的;一般可以在函数传参时使用,或者接收到的某个变量,若要将该变量作为索引值时可以使用table.[]

local a = "x"
local b = "y"

print(tb[a],tb[b])
--此时就直接索引进行返回该索引上的值了 tb[a] == tb["x"]
--	  		  						ta[b] == tb["y"]

其实它们的区别是一个直接固定了索引值;另一个可以通过变量来进行改变索引



特殊情况:像下面这种情况需要注意一下

tb = {x=1,y=1}

print(tb.x,tb["x"],tb["y"],tb[x])	
--输出结果为: 1	 1  1  nil

  1. tb = {x=1,y=1}中的x=1,y=1其实时相当于tb.x==1,tb.y==1
  2. 关于为什么tb[x]会打印nil是因为此时并没有x这个变量,所以这个时候tb[x]==tb[nil]
  3. 这其实是table里面的一种初始化语法,并非是tb里面有一个索引为x

当tb表中存在了x=1,此时在定义一个["x"]="yy"后此时永远都只会使用最后一次赋的值,因为它们代表的是同一个索引

tb = {x=1,y=1,["x"]="yy"}
print(tb.x,tb["x"],tb["y"],tb[x])
--输出结果:yy	yy	1	nil
--此时有了["x"]索引更新了它的值,所以tb.x与tb["x"]就会打印 yy

### Lua 中 `table.insert` 的使用方法 `table.insert` 是 Lua 中用于向表(table)中插入元素的一个内置函数。它的作用是将一个值插入到表的指定位置,或者默认插入到表的末尾。以下是关于 `table.insert` 的详细说明和示例。 #### 语法 `table.insert(table, [pos,] value)` - **`table`**:目标表,即需要插入元素的表。 - **`pos`**(可选):插入的位置索引。如果省略,则将元素追加到表的末尾。 - **`value`**:要插入的值。 #### 描述 当调用 `table.insert` 时,如果指定了 `pos` 参数,则会将值插入到表中的第 `pos` 个位置,并将后续元素向后移动一位[^1]。如果没有指定 `pos` 参数,则会将值追加到表的末尾。 #### 示例代码 以下是一些使用 `table.insert` 的示例: ```lua -- 创建一个空表 local tbl = {} -- 向表末尾插入元素 table.insert(tbl, "Apple") -- tbl = {"Apple"} table.insert(tbl, "Banana") -- tbl = {"Apple", "Banana"} -- 在指定位置插入元素 table.insert(tbl, 2, "Orange") -- tbl = {"Apple", "Orange", "Banana"} -- 打印表内容 for i, v in ipairs(tbl) do print(i, v) end ``` 运行结果: ``` 1 Apple 2 Orange 3 Banana ``` #### 注意事项 1. 如果插入的位置超出了表的当前长度,则会在该位置插入值,并将中间的空位填充为 `nil`[^4]。 2. 如果表中已经存在非连续的 `nil` 值,则可能导致意外行为,因为 Lua 使用 `#table` 来确定表的长度,而 `#table` 不会计算中间的 `nil` 值。 #### 示例代码(处理非连续 `nil`) ```lua local tbl = {1, nil, 3} table.insert(tbl, 2, "Inserted") -- tbl = {1, "Inserted", nil, 3} for i, v in pairs(tbl) do print(i, v) end ``` 运行结果: ``` 1 1 2 Inserted 3 nil 4 3 ``` #### 性能优化 在 LuaJIT 中,`table.insert` 的性能通常较高,但如果需要频繁插入或删除元素,建议预先分配表的大小以减少内存分配的开销[^2]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值