网易首页 > 网易号 > 正文 申请入驻

了解下如何在lua 中求 table 长度

0
分享至

官方文档是这么描述 # 的:取长度操作符写作一元操作 #。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。

table t 的长度被定义成一个整数下标 n 。 它满足 t[n] 不是 nil 而 t[n+1] 为 nil; 此外,如果 t[1] 为 nil ,n 就可能是零。 对于常规的数组,里面从 1 到 n 放着一些非空的值的时候, 它的长度就精确的为 n,即最后一个值的下标。 如果数组有一个“空洞” (就是说,nil 值被夹在非空值之间), 那么 #t 可能是指向任何一个是 nil 值的前一个位置的下标 (就是说,任何一个nil 值都有可能被当成数组的结束)。

local tblTest2 =
{
1,
a = 2,
3,
}
print(table.getn(tblTest2))

这段代码输出的结果是多少?这里的输出结果应该是 2。首先,要明白,这个ctblTest2c不是一个简单的ctable,它混合了列表(list)和记录(record)两种风格,表中,a = 2 是 record 风格。其次,要明白,record 风格的 record 是不作为外表的长度计算。你可以把它想象成一个函数,跟其他面向对象语言一样,函数是不记为内部变量的。

既然像函数一样,那就可以输出a的值,是的。print(tblTest2·a) 就可以了。

再看下面的代码:

local tblTest3 =
{
1,
{a = 2},
3,
}
print(table.getn(tblTest3))

这段代码输出的结果是多少?这里的输出结果应该是 3。要注意,表嵌套表,嵌套表也是元素。所以,输出的结果是 3。

table.getn(t) 等价于 #t。

以下情况相当纠结,可直接看最后一句话总结:

现在来看一个比较纠结的:

local tblTest4 =
{
1,
nil,
}
print(table.getn(tblTest4))

这段代码输出的结果是多少?是1。我们都知道table获取长度的时候,会遍历一下整个表,在最后一个非nil处,就会返回。

但是,下面这段代码呢?

local tblTest5 =
{
1,
nil,
2,
}
print(table.getn(tblTest5))

输出 3,好玩吧?它把 nil 也当成元素计算长度了。但叫你摸不着头脑的是下面这段代码:

local tblTest5 =
{
1,
nil,
2,
nil
}

输出1.再发一段,让你完全蒙掉:

local tblTest5 =
{
1,
nil,
2,
nil,
3,
nil
}

输出 3,蒙了没?再看,这一段叫你以后再也不敢在 table 中写 nil 值:

local tblTest5 =
{
1,
nil,
2,
nil,
3,
nil,
4,
nil
}

看看吧,这一段的输出结果是 1。亲,请问,你以后还敢在 lua 的 table 中用 nil 值吗???如果你继续往后面加 nil,你可能会发现点什么。你可能认为你发现的是个规律。但是,你千万不要认为这是个规律。因为这是错误的。

  1. 在 table 中不要使用 nil
  2. 如果非要使用 nil,必须用 table.setn() 函数去设置这个 table 表的长度。注意:新版本的 lua 已经不支持 setn了。

必须给你个结论:setn 函数已过时,不要在 lua 的 table 中使用 nil 值,如果一个元素要删除,直接 remove,不要用 nil 去代替。

本文地址:https://www.linuxprobe.com/understand-how-to.html

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
北京有个地下车库着火了

北京有个地下车库着火了

靠山屯闲话
2026-05-16 18:37:35
售罄!女歌手演唱会门票低至40元!网友热议

售罄!女歌手演唱会门票低至40元!网友热议

无比
2026-05-14 20:17:32
新汽油来了,103号!

新汽油来了,103号!

纵相新闻
2026-05-16 20:06:04
程序员被裁疯狂报复!一小时删光96个美国政府数据库,只是爽完要坐牢45年...

程序员被裁疯狂报复!一小时删光96个美国政府数据库,只是爽完要坐牢45年...

英国那些事儿
2026-05-14 23:29:24
曹德旺不顾女婿能臣,铁了心传子,曹晖如今与马斯克同桌显排面

曹德旺不顾女婿能臣,铁了心传子,曹晖如今与马斯克同桌显排面

牛锅巴小钒
2026-05-15 12:35:50
年薪仅381万,却能锁死哈登+场均拿10+6!又一落选秀完成逆袭

年薪仅381万,却能锁死哈登+场均拿10+6!又一落选秀完成逆袭

篮球圈里的那些事
2026-05-16 20:39:40
要打奉陪到底,中方当面插旗,沉默72小时后,日本在境外发射导弹

要打奉陪到底,中方当面插旗,沉默72小时后,日本在境外发射导弹

静儿家
2026-05-16 09:54:33
辛识平:彩礼做减法,幸福做加法

辛识平:彩礼做减法,幸福做加法

新华社
2026-05-15 21:48:25
获胜仅5天,张本美和公开锐评王曼昱世乒赛表现,6字惹众怒

获胜仅5天,张本美和公开锐评王曼昱世乒赛表现,6字惹众怒

观史搜寻着
2026-05-16 08:45:20
恭喜!千万粉丝网红宣布领证结婚

恭喜!千万粉丝网红宣布领证结婚

天津生活通
2026-05-14 06:32:09
让学术能力很强的博士退学的后果是:学术圈的“杰青”保不住了

让学术能力很强的博士退学的后果是:学术圈的“杰青”保不住了

必记本
2026-05-15 12:08:25
樊振东出战拿下完胜,助萨尔布吕肯闯进乒乓球欧冠决赛

樊振东出战拿下完胜,助萨尔布吕肯闯进乒乓球欧冠决赛

澎湃新闻
2026-05-16 20:10:29
全红婵妈妈住院照曝光 已握不住手 情况不乐观 婵宝的话字字催泪

全红婵妈妈住院照曝光 已握不住手 情况不乐观 婵宝的话字字催泪

游古史
2026-05-16 19:58:13
上海学者亲历中美国宴:“这样热络的交流氛围多年未见了”

上海学者亲历中美国宴:“这样热络的交流氛围多年未见了”

澎湃新闻
2026-05-15 20:32:28
“近一半的孩子不正常”,男老师吐槽乡镇学校现状,令人脊背发凉

“近一半的孩子不正常”,男老师吐槽乡镇学校现状,令人脊背发凉

妍妍教育日记
2026-05-09 13:54:42
一天中,最佳的性生活时间是在几点?早上好还是晚上好?出乎意料

一天中,最佳的性生活时间是在几点?早上好还是晚上好?出乎意料

荆医生科普
2026-05-06 20:55:04
平壤街头那些“国产车”的秘密:2002年以后,再没造出一辆

平壤街头那些“国产车”的秘密:2002年以后,再没造出一辆

百姓识天下
2026-04-20 08:43:49
股债双杀!美国芯片股重挫,英伟达、英特尔跌超4%,白银狂泄9%

股债双杀!美国芯片股重挫,英伟达、英特尔跌超4%,白银狂泄9%

每日经济新闻
2026-05-16 12:07:02
医生:这6种癌症几乎不影响寿命,确诊后别慌,合理治疗即可!

医生:这6种癌症几乎不影响寿命,确诊后别慌,合理治疗即可!

健康之光
2026-04-03 16:15:03
两年连罚4次!安徽大型轮胎厂又被罚了

两年连罚4次!安徽大型轮胎厂又被罚了

轮胎报官方
2026-05-15 17:04:28
2026-05-16 21:51:00
linux系统运维之家
linux系统运维之家
科技资讯
1392文章数 7550关注度
往期回顾 全部

科技要闻

涨的是车价,要的是老命

头条要闻

"特朗普移动"手机开始发货 59万人交了5900万美元定金

头条要闻

"特朗普移动"手机开始发货 59万人交了5900万美元定金

体育要闻

马刺2号,少年老成,这集看过?

娱乐要闻

谢霆锋北京街头骑行被偶遇,侧颜帅炸

财经要闻

造词狂魔贾跃亭

汽车要闻

高尔夫GTI刷新纽北纪录 ID. Polo GTI迎全球首秀

态度原创

房产
艺术
游戏
家居
健康

房产要闻

老黄埔热销之下,珠江春,为何去化仅3成?

艺术要闻

17亿美元!中东首个Sphere场馆,落地阿布扎比!

时代落幕!国行NS天猫店将终止运营:结束了

家居要闻

110㎡淡而有致的生活表达

专家揭秘干细胞回输的安全风险

无障碍浏览 进入关怀版