Lua学习笔记7-table的长度获取

table中长度获取可以使用#来实现,但如果table中有nil就会出现一些奇怪的现象,例如:

local tab =
{
    1,
    nil,
}
print(#tab)
输出结果为:1

local tab =
{
    1,
    nil,
    2,
    nil
}
print(#tab)

同样输出1

但是继续添加后

local tab =
{
    1,
    nil,
    2,
    nil,
    3
}
print(#tab)
输出结果就为5

再添加一个nil结果又变了

local tab =
{
    1,
    nil,
    2,
    nil,
    3,
    nil
}
print(#tab)
结果输出变成了3

所以由上面就可以看出了,在table中加入nil元素是非常危险的,在使用table一定要注意不能加入nil元素。


Lua的table使用中,给一个元素赋值nil就等于删除它,其实这样做是存在危险的,比如使用ipairs迭代遍历就会有提前终止遍历的危险,所以删除table中的元素最好使用table.remove方法来实现。remove方法最大的好处是不会破坏table的有序性,如原有1...n的序列,如果给索引为2的元素赋值nil,则索引为2的地方就为nil,整个序列是“断”的。使用remove删除索引为2的元素后,后面的元素会统一往前移动,整个序列还是“连续”的。


关于table的长度计算中有一些特例,

tab = {1, 2, k1 = 33, 4}
print(#tab)
得到的长度为3

主要是因为tab混合了列表(list)和记录(record)两种风格,表中k1=33是record风格,并且record是不作为外表的长度计算。

如果将程序改为,

tab = {1, 2, {k1 = 33}, 4}
print(#tab)
则计算出的长度就为4

这是因为嵌套表也是元素,是会参与到长度的计算。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值