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

前端之家收集整理的这篇文章主要介绍了lua – `table.insert(t,i)`和`t [#t 1] = i`有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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通常就足够了)。

猜你在找的Lua相关文章