Lua中使用#求含nil的数组长度漫谈
Lua中含nil的数组长度
在lua中常常使用 “#” 来获取数组的长度,但仅对于数组中不存在nil值的情况,当数组中存在nil情况下则使用#获取的数组长度则变的不定,这里就来简单验证下。
试看以下代码片段:
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > table1 = {nil,1,12,45,nil} > print(#table1) 4 > table2 = {nil,nil,1,2,3,4} > print(#table2) 6 > table3 = {nil,nil,1,2,3,4,nil,1,2,nil} > print(#table3) 6 > a = 12 > b = 13 > c = 15 > table4 = {nil,nil,a,b,c,154,nil,256} > print(#table4) 8
先给出结论:
- Lua 的
#
运算符会寻找最大的连续整数键n
,使得table[n]
不为nil
,且table[n+1]
为nil
这条结论适用于table1 和 table3 情况
-
如果表中存在
nil
空洞(即非末尾的nil
),#
的结果可能不符合预期结合table2 的长度数值来看。其长度计算方式是与结论一所对应的方式,即找出最大的非nil值连续区间的末尾元素,
返回末尾元素的索引。
而table4 如果也使用此规则则应该返回的是 数值154 对应的索引 6,而实际返回的结果却是 8
来看DeepSeek给出的可能性分析:
因此可知,lua对于非nil结尾的含有nil的table 的# 求取长度的结果不定性。
总结:
在 Lua 中,#
运算符不适合用于含 nil
空洞的数组。
本文作者:畅知
本文链接:https://www.cnblogs.com/TonyCode/p/18740074
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步