在Lua中,似乎有两种向数组追加元素的方法:
table.insert(t, i)
and
t[#t+1] = i
我应该使用哪个,为什么?
使用哪一个取决于偏好和环境:#
长度运算符在 5.1 版本中引入,t[#t+1] = i
在 Lua 5.0 中不起作用,而table.insert
从 5.0 开始就存在,并且可以在两者中使用。另一方面,t[#t+1] = i
仅使用语言级运算符,而table.insert
涉及一个函数(它有少量的查找和调用开销,并且取决于table
环境中的模块)。
在第二版中Lua 编程 http://www.lua.org/pil/(面向 Lua 5.0 的第一版的更新),Roberto Ierusalimschy(Lua 的设计者)表示他更喜欢t[#t+1] = i
,因为它更明显。
此外,根据您的用例,答案可能是“两者都不是”。看手动输入长度运算符的行为 http://www.lua.org/manual/5.1/manual.html#2.5.5:
如果数组有“洞”(即其他非 nil 值之间的 nil 值),则 #t 可以是直接位于 nil 值之前的任何索引(即,它可以将任何此类 nil 值视为结束值)的数组)。
因此,如果您正在处理有孔的数组,请使用其中之一(table.insert使用长度运算符 http://www.lua.org/manual/5.1/manual.html#pdf-table.insert)可能会将您的值“追加”到数组中比您想要的更低的索引。在这种情况下如何定义数组的大小取决于您,并且同样取决于偏好和环境:您可以使用table.maxn
(在 5.2 中消失,但写起来很简单),你可以保留一个n
表中的字段并在必要时更新它,您可以将表包装在元表中,或者您可以使用另一种更适合您情况的解决方案(在循环中,local tsize
在紧邻循环外部的范围内通常就足够了)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)