网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月26日
漏签
0
天
lua吧
关注:
11,591
贴子:
21,930
看贴
图片
吧主推荐
游戏
1
2
下一页
尾页
28
回复贴,共
2
页
,跳到
页
确定
<<返回lua吧
>0< 加载中...
lua数组长度计算搞不清
只看楼主
收藏
回复
zhzh50
默默无闻
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
t = {};
t[1] = "aa";
t[2] = "bb";
t[5] = "dd";
print(#t);
这个时候会打印2,表示数组长度是2。
但是如果我改一下。
t = {};
t[1] = "aa";
t[2] = "bb";
t[4] = "dd";
这时候就打印为4了,我明明t[3]是nil,长度应该依然是2才对,为什么打印为4呢。
搞不懂,求解释。
天使的枷锁
声名远扬
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我对 lua table 长度计算的理解也和 LZ 一样
现在看了 LZ 的测试,蒙了
同求解释
北京勤哲软件技术
勤哲Excel服务器2024学习和下载。用Excel自动生成简单编程软件及手机app.软博会金奖产品,适合于各行各业的管理人员使用。
2025-01-26 01:03
广告
立即查看
书中橙子
崭露头角
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个是使用循环实现的。
要像你这么做表是要这么定义的
s={[0]=1,2,3,4}
print(s[0])
就行了
书中橙子
崭露头角
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我的意思是启始下标是可以自己定的,Lua的标准库默认是从1开始的。如果你不用循环实现,会出现问题。
其实它的下标相当于hasm表中索引,你是无法根据索引求表长的。
有两个原因:1.索引可能是一个字串符
opnames = {["+"] = "add", ["-"] = "sub",["*"] = "mul", ["/"] = "div"}
2.如果使用默认的,索引从1开始,即使这样,你能确定中间无间隔。
如:t={};t[1]=1;t[2]=3;t[5]=5;print(#t)的输出却是2,只有连续的才 可以是正确的长度
zhzh50
默默无闻
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你误解我意思了,你说的我明白,正常使用过程中肯定是要自己重新封装一个数组的,那么不存在长度计算异常的问题。
我的意思是对这个源生的计算方式感觉不明白,按照官方说法,忽略表中的key为字符这种情况,把它当成数组时,会从索引为1开始累加计数,遇到nil后则停止,忽略后面的元素。此时则为这个数组的有效长度。
那么我上面两段代码,第一段中,t[3]和t[4]都是nil,计算长度为2,这是正确的。第二段中,t[3]是nil,虽然t[4]有值,但是计算应该到t[2]后就终止,长度也应该是2才对,但是却输出为4,这个跟说明的计算方式不一致。
所以我困惑在这个地方,不明白是我理解错了,还是说lua这个最基础的计算方式有bug。
书中橙子
崭露头角
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
官方的说明中,并没有找到这样的说明。但是表的长度计算,确定是一个bug。
使用官方求长度会让你摸不着头脑。
不知者来此
远近闻名
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
没有必要去纠结这些,lua的自由度如此高,允许一些模糊的概念存在有何不可
qqirisit
大名鼎鼎
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
官方说明书:
http://www.lua.org/manual/5.2/manual.html#3.4.6
要么求数组长度,要么求字符串长度,其它都是不正确的用法。
北京勤哲软件技术
勤哲Excel服务器软件2024,用Excel自动生成基于web,移动APP和PC的简单的编程软件。软博会金奖产品,适合于各行各业的管理人员使用。
2025-01-26 01:03
广告
立即查看
鎏金沙漠
大名鼎鼎
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
lua程序设计英文第三版也提到了这个问题,那里用的是几个疑问句而不是给出了确切的解答,然后说了一种只有最后几位是nil的特例(那种显然最后那几个nil不算进去的),最后面说有nil就得在list的最后。
壹刀砍死明天
默默无闻
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
好奇怪
t = {};
t[1] = "aa";
t[3] = "bb";
t[4] = "dd";
print(#t)
结果为4,
,
t = {};
t[2] = "aa";
t[3] = "bb";
t[4] = "dd";
print(#t)
结果为也4,
t = {};
t[1] = "aa";
t[3] = "bb";
t[5] = "dd";
print(#t)
结果为1,
。。。。。
rain_bow_1
默默无闻
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
lua 这么取数组长度会被 nil 截断的。
nil 之后的不被计算。
xiaogou56d
默默无闻
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
站在bit位去理解#的作用就好些了。1248...2的整数次幂指数
herolyface
锋芒毕露
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#是一个算法,先扩大两倍,再折半计算,
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示