加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua – `table.insert(t,i)`和`t [#t 1] = i`有什么区别?

发布时间:2020-12-15 00:22:48 所属栏目:大数据 来源:网络整理
导读:在lua中,似乎有两种方法将元素附加到数组中: table.insert(t,i) 和 t[#t+1] = i 我应该用什么,为什么? 解决方法 哪个使用是一个偏好和情况的问题:由于#版本的操作符在版本5.1中被引入,所以t [#t 1] =我将不会在Lua 5.0中工作,而table.insert从5.0开始
在lua中,似乎有两种方法将元素附加到数组中:
table.insert(t,i)

t[#t+1] = i

我应该用什么,为什么?

解决方法

哪个使用是一个偏好和情况的问题:由于#版本的操作符在版本5.1中被引入,所以t [#t 1] =我将不会在Lua 5.0中工作,而table.insert从5.0开始就可以使用,都。另一方面,t [#t 1] = i仅使用语言级别的运算符,wheras table.insert涉及到一个函数(它具有少量的开销来查找和调用,并且取决于环境中的表模块) 。

在第二版Programming in Lua(Lua 5.0版第一版的更新)中,Roberto Ierusalimschy(Lua的设计师)说,他更喜欢t [#t 1] = i,因为它更明显。

另外,根据你的用例,答案可能是“不”。见the manual entry on the behavior of the length operator:

If the array has “holes” (that is,nil values between other non-nil values),then #t can be any of the indices that directly precedes a nil value (that is,it may consider any such nil value as the end of the array).

因此,如果您正在处理具有漏洞的数组,则使用(table.insert uses the length operator)可能会将值附加到数组中的较低索引。在这种情况下,您如何定义数组的大小取决于您,而且依赖于优先级和环境:您可以使用table.maxn(在5.2中消失,但很简单),您可以在n表,并在必要时进行更新,您可以将表包装在metatable中,或者您可以使用更适合您的情况的其他解决方案(在循环中,紧邻循环外的本地tsize通常就足够了)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读