我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

先来看 lua table 源码长度获取部分(ltable.c)

j 是数组部分的长度。首先判断数组长度大于 0,并且数组最后一个是 nil,就用二分法查找,返回长度。

如果 t->node 是 table 的 hash 部分存放,如果是空,就返回数组的长度。

种例子:

对于这种,初始化了数组长度,t 的长度是 7,为什么呢。因为最后一位不是 nil

以下情况 t 的长度就是 5。

第二种例子:

大家都应该知道 t 的长度是 5。

这样的话,t的长度是多少呢???

答案是 2,为什么呢?

对于 t[6] 的插入,导致 table 表 rehash。

t[6] 会先调用(lapi.c)

然后会进入(lvm.c)

然后会调用(ltable.c)luaH_newkey这个函数

然后调用 rehash

这个地方其实是数组部分和放到hash部分的计算,nums 是统计数字的分布,仔细看代码会知道数组长度是 2 的 n 次方。

这儿 nil 不是数字不会纳入统计,所以 1,2,5,6 会计算出数组长度是 4,其余部分放入到 node 部分

table 是有数组和 node hash 部分组成。

这样根据我们前面看的函数,第四个是 nil,所以用二分法找出的长度是 2。

这样是 lua 数组里面如果 nil,可能会导致的坑,当然只是 rehash 导致的。

我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为1000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版百度优化、名注册、主机空间、手机网站建设公众号开发小程序制作、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线: 13820372851,我们会详细为你一一解答你心中的疑难。项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13820372851

上班时间

周一到周五

公司电话

022-26262675

二维码
线
在线留言