table.insert(t,i)和t [#t + 1] = i有什么区别?
|
在Lua中,似乎有两种将元素追加到数组的方法:
table.insert(t, i)
和
t[#t+1] = i
我应该使用哪个?为什么?
没有找到相关结果
已邀请:
4 个回复
仇聘发栖
长度运算符,因此
在Lua 5.0中将不起作用,而ѭ4since从5.0开始就已经存在并且将在两者中均有效。另一方面,
仅使用语言级别的运算符,,4ѭ涉及一个函数(查找和调用的开销很小,并且取决于环境中的
模块)。 在Lua编程的第二版(面向Lua 5.0的第一版的更新)中,Roberto Ierusalimschy(Lua的设计师)指出,他更喜欢
,因为它更为明显。 另外,根据您的用例,答案可能是“都不”。有关长度运算符的行为,请参见手册条目: 如果数组具有\“ holes \”(即其他非nil值之间的nil值),则#t可以是直接在nil值之前的任何索引(也就是说,它可以将任何此类nil值视为数组的末尾)。 因此,如果要处理带孔的数组,则使用其中一个(
使用长度运算符)可能会将您的值“追加”到数组中比所需的索引低的位置。在这种情况下,如何定义数组的大小取决于您自己,并且再次取决于首选项和情况:您可以使用
(在5.2中消失,但编写起来很简单),可以在表中保留
字段,必要时进行更新,可以将表包装在一个元表中,或者可以使用其他更适合您情况的解决方案(在循环中,循环外部的作用域中的
通常就足够了)。
量华
,也可以轻松滚动自己的变体,并根据需要获得第三种表示法。
犀寺扦
可以任意插入(如其名称所示),它仅默认为
,因为
始终会附加到表的(末尾)。参见lua手册中的5.5节。
先对冈蒲
在上面的代码
\'#\'运算符不使用时。 如果要使用\'#\'运算符,则将其检查为表元素类型。 插入函数可以使用任何类型使用。但是元素计数比\'#\'慢