薯羞 发表于 2025-6-1 21:44:38

Lua中使用#求含nil的数组长度漫谈

Lua中含nil的数组长度

在lua中常常使用 “#” 来获取数组的长度,但仅对于数组中不存在nil值的情况,当数组中存在nil情况下则使用#获取的数组长度则变的不定,这里就来简单验证下。
试看以下代码片段:
Lua 5.1.5Copyright (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 不为 nil,且 table 为 nil
这条结论适用于table1 和 table3 情况

[*]如果表中存在 nil 空洞(即非末尾的 nil),# 的结果可能不符合预期
结合table2 的长度数值来看。其长度计算方式是与结论一所对应的方式,即找出最大的非nil值连续区间的末尾元素,
返回末尾元素的索引。
而table4 如果也使用此规则则应该返回的是 数值154 对应的索引 6,而实际返回的结果却是 8
来看DeepSeek给出的可能性分析:

​        因此可知,lua对于非nil结尾的含有nil的table 的# 求取长度的结果不定性。
总结:
在 Lua 中,# 运算符不适合用于含 nil 空洞的数组。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

晦险忿 发表于 2025-10-29 20:10:40

前排留名,哈哈哈

喳谍 发表于 2025-10-30 20:53:13

用心讨论,共获提升!

科元料 发表于 2025-11-6 14:22:02

感谢分享,学习下。

喳谍 发表于 2025-11-28 01:26:07

喜欢鼓捣这些软件,现在用得少,谢谢分享!

驶桐柢 发表于 2025-11-30 21:02:24

东西不错很实用谢谢分享

梁丘眉 发表于 2025-12-8 00:48:59

分享、互助 让互联网精神温暖你我

山芷兰 发表于 2025-12-25 23:44:42

很好很强大我过来先占个楼 待编辑

钱艷芳 发表于 2026-1-5 12:33:01

收藏一下   不知道什么时候能用到

笙芝 发表于 2026-1-13 22:58:01

感谢分享,下载保存了,貌似很强大

水苯 发表于 2026-1-17 12:51:39

前排留名,哈哈哈

拓炊羡 发表于 2026-1-18 18:34:46

感谢,下载保存了

薯羞 发表于 2026-1-20 07:56:15

感谢分享,下载保存了,貌似很强大

届表 发表于 2026-1-21 02:36:08

感谢发布原创作品,程序园因你更精彩

洫伍俟 发表于 2026-1-21 04:43:16

东西不错很实用谢谢分享

咫噎 发表于 2026-1-21 18:17:14

东西不错很实用谢谢分享

柏雅云 发表于 2026-1-24 08:01:52

热心回复!

狞嗅 发表于 2026-1-27 03:29:02

yyds。多谢分享

锑砖 发表于 2026-1-28 04:14:52

感谢分享,学习下。

梅克 发表于 2026-2-3 01:32:22

鼓励转贴优秀软件安全工具和文档!
页: [1] 2
查看完整版本: Lua中使用#求含nil的数组长度漫谈