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

了解下如何在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.

相关推荐
热点推荐
18家大国企全军覆没!昔日世界第一的中国机床,还有翻身机会吗?

18家大国企全军覆没!昔日世界第一的中国机床,还有翻身机会吗?

史诗长歌
2024-11-16 07:50:02
追平塔利斯卡,C罗以77球并列成为利雅得胜利队史第二外籍射手

追平塔利斯卡,C罗以77球并列成为利雅得胜利队史第二外籍射手

直播吧
2024-11-29 15:10:43
这大概是章泽天最真实的照片了,抛弃一切身份,此时她只是位母亲

这大概是章泽天最真实的照片了,抛弃一切身份,此时她只是位母亲

人情皆文史
2024-10-13 00:04:08
旺达:伊卡尔迪在我情绪低落时拍摄视频,他不可能带走女儿

旺达:伊卡尔迪在我情绪低落时拍摄视频,他不可能带走女儿

懂球帝
2024-11-29 10:02:14
外媒:黎以达成停火协议,也门胡塞武装、伊拉克分别发声

外媒:黎以达成停火协议,也门胡塞武装、伊拉克分别发声

环球网资讯
2024-11-27 18:03:33
人才济济!女排最佳阵容揭晓,新版刘晓彤堪称无解,江苏收获满满

人才济济!女排最佳阵容揭晓,新版刘晓彤堪称无解,江苏收获满满

浪子阿邴聊体育
2024-11-29 14:09:31
场均2.8分!年薪千万文森特,湖人是怎么上当的?

场均2.8分!年薪千万文森特,湖人是怎么上当的?

篮球实录
2024-11-30 00:01:52
长三角百强企业数量:上海29家仅第二,江苏23家第三,第一凭啥?

长三角百强企业数量:上海29家仅第二,江苏23家第三,第一凭啥?

阿伧说事
2024-11-29 18:15:15
吴京拍《镖人》纯属报恩,他在帮师父挣养老钱

吴京拍《镖人》纯属报恩,他在帮师父挣养老钱

光影新天地
2024-11-29 15:08:17
刘晓庆的瓜愈演愈烈!小男友再爆猛料私密视频流出,他得寸进尺了

刘晓庆的瓜愈演愈烈!小男友再爆猛料私密视频流出,他得寸进尺了

辣条小剧场
2024-11-09 06:22:17
八路军成立后,任职名单交到毛主席手里,他怒道:欺负老实人!

八路军成立后,任职名单交到毛主席手里,他怒道:欺负老实人!

洞鉴五千年
2024-11-29 12:03:35
挤走4个女人,15年稳坐正宫,生3子分走700亿的她,才是真聪明人

挤走4个女人,15年稳坐正宫,生3子分走700亿的她,才是真聪明人

聚合大娱
2024-11-26 13:50:03
潘金莲与西门庆行房多次,武大郎为何装聋作哑?只有武松将他看透

潘金莲与西门庆行房多次,武大郎为何装聋作哑?只有武松将他看透

耳东文史
2024-11-29 00:08:56
3胜14负!明日76人对阵活塞 恩比德因左膝伤病管理继续缺阵

3胜14负!明日76人对阵活塞 恩比德因左膝伤病管理继续缺阵

直播吧
2024-11-30 01:30:16
42岁前央视主持孙靖涵移居日本!自曝原因获谅解,已彻底融于当地

42岁前央视主持孙靖涵移居日本!自曝原因获谅解,已彻底融于当地

小咪侃娱圈
2024-11-27 09:37:49
最新战报!NO.98张安达附体:救3赛点,2-5到5-5,世界亚军翻车?

最新战报!NO.98张安达附体:救3赛点,2-5到5-5,世界亚军翻车?

刘姚尧的文字城堡
2024-11-29 07:45:13
华裔作家揭秘刘亦菲美国生活:继父是华人大律师,一家人住富人区

华裔作家揭秘刘亦菲美国生活:继父是华人大律师,一家人住富人区

简读视觉
2024-11-23 11:05:03
官方回击管晨辰,揭开吴柳芳不为人知一面,擦边视频背后令人动容

官方回击管晨辰,揭开吴柳芳不为人知一面,擦边视频背后令人动容

球盲百小易
2024-11-29 00:55:27
96年,浙江9岁女孩长“马脸”,蒙面13年不见人,医生换脸助新生

96年,浙江9岁女孩长“马脸”,蒙面13年不见人,医生换脸助新生

苏曼文史
2024-11-27 09:07:07
《再见爱人》破案了,麦琳上节目是被“骗了”!李行亮朋友曝内幕

《再见爱人》破案了,麦琳上节目是被“骗了”!李行亮朋友曝内幕

苏星河呀
2024-11-27 20:45:03
2024-11-30 02:11:00
linux系统运维之家
linux系统运维之家
科技资讯
1392文章数 7552关注度
往期回顾 全部

科技要闻

"AGI不是大杀器,是普通人每天在用的产品"

头条要闻

男子疑因吃"驴打滚"窒息身亡 目击者:他无法吐出食物

头条要闻

男子疑因吃"驴打滚"窒息身亡 目击者:他无法吐出食物

体育要闻

穆雷与德约科维奇能凑成王炸组合吗?

娱乐要闻

叶珂被曝独自去产检,他俩真分了吗

财经要闻

专家建议将农民养老金提升至每月500元

汽车要闻

问界M7今年累计交付量已突破18万辆

态度原创

健康
艺术
教育
公开课
军事航空

花18万治疗阿尔茨海默病,值不值?

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

教育要闻

9年后中小学生数或跌至6成,中小学教师超过需求量!

公开课

一块玻璃,如何改变人类世界?

军事要闻

针对朝鲜半岛 韩美核咨商小组兵棋推演将举行

无障碍浏览 进入关怀版