此时结果会变小,因为当遍历到20000时,发现数组大小不够,触发rehash,rehash会保证数组部分的使用率大于50%,因此会减小数组部分的大小。为nil的也会被删除。
又比如当我们直接声明一个local t ={} t[100] =1,此时为了保证数组的使用效率大于50%,会直接将键值对{100,1}储存在hash表部分。 4. 常见的清空table的写法。
方法一:
for k in pairs(t) do t[k] =nil end
方法二
while true do
local k =next(t,nil)
if not k then
break
end
t[k] = nil
end
第二种写法比第一种写法要耗时。next每次返回当前key的值和下一个不为nil的元素的key。当传入的key为nil的时候,每次返回第一个部位nil的键值对的值。第二种写法每次传入的key都为nil,随着table被不断置为nil,寻找第一个不为nil的键值对,将会越来越耗时。而pair虽然也是用next实现的,但是配合上泛型迭代器for,每个循环都会获得上个循环的状态,因此效率上要快很多。第一种写法等价于:for k,v in next(t,nil) do,每个循环都将next返回的key传入下一个循环的next。