Lua table的remove和nil操作的区别

我在看《Lua程序设计(第二版)》的时候,这本书不是看了不止一遍了,每次看都有新发现。
今天看到这么一句话:Lua中的table可以像全局变量一样,将nil赋予table的某个元素来删除该元素。了解Lua的都知道Lua的table还有个table.remove方法来删除table中的制定元素,对于这两种删除table元素的方法,我每次总搞混删除后table究竟变成了什么样子,为了以后再忘记,今天就自己敲了几行代码,以后方便查看。

首先看一下使用赋值nil的方式删除table元素的结果

a = {1, 2, 3, 4, 5}
print("删除元素前的a: ")
for k, v in ipairs(a) do
    print(k, v)
end
print("删除元素前a的长度 : ", #a)
a[4] = nil

print("删除元素后的a : ")
for k, v in ipairs(a) do
    print(k, v)
end
print("删除元素后a的长度 : ", #a)
print("a[4] = ", a[4], "a[5] = ", a[5])

打印出的结果:
这里写图片描述

从结果可以看到,只是table的第四个元素变成了nil,其长度仍然是5,在使用ipairs打印a的元素的时候碰到nil结束循环,影响的仅仅是第四个元素,其他位置的元素均保持不变。

再来看一下table.remove方法

a = {1, 2, 3, 4, 5}
print("删除元素前的a: ")
for k, v in ipairs(a) do
    print(k, v)
end
print("删除元素前a的长度 : ", #a)
table.remove(a, 4)

print("删除元素后的a : ")
for k, v in ipairs(a) do
    print(k, v)
end
print("删除元素后a的长度 : ", #a)
print("a[4] = ", a[4], "a[5] = ", a[5])

table.remove的结果
这里写图片描述

从结果可以看出table.remove真正删除了第4个元素,后面的元素向前挪了一个位置,也就是说,table.remove删除元素影响到了后面的元素位置。

注意:这里的table类似与数组的概念,类似字典的使用nil删除即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值