2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Lua

lua table 长度解析

时间:02-27来源:作者:点击数:50
城东书院 www.cdsy.xyz

先来看 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 导致的。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐