企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 判断数组大小 ### Lua数组需要注意的细节 Lua中,数组的实现方式其实类似于C++中的map,对于数组中所有的值,都是以键值对的形式来存储(无论是显式还是隐式), *Lua* 内部实际采用哈希表和数组分别保存键值对、普通值,所以不推荐混合使用这两种赋值方式。尤其需要注意的一点是:Lua数组中允许nil值的存在,但是数组默认结束标志却是nil。这类比于C语言中的字符串,字符串中允许'\0'存在,但当读到'\0'时,就认为字符串已经结束了。 初始化是例外,在Lua相关源码中,初始化数组时首先判断数组的长度,若长度大于0,并且最后一个值不为nil,返回包括nil的长度;若最后一个值为nil,则返回截至第一个非nil值的长度。 注意!!一定不要使用#操作符来计算包含nil的数组长度,这是一个未定义的操作,不一定报错,但不能保证结果如你所想。如果你要删除一个数组中的元素,请使用remove函数,而不是用nil赋值。 ~~~ local arr1 = {1, 2, 3, [5]=5} print(#arr1) -- output: 3 local arr2 = {1, 2, 3, nil, nil} print(#arr2) -- output: 3 local arr3 = {1, nil, 2} arr3[5] = 5 print(#arr3) -- output: 1 local arr4 = {1,[3]=2} arr4[4] = 4 print(#arr4) -- output: 4 ~~~ 按照我们上面的分析,应该为1,但这里却是4,所以一定不要使用#操作符来计算包含nil的数组长度。