如何在Lua中向表格添加内容

106

我正试图找出等效于:

foo = []
foo << "bar"
foo << "baz"

我不想自己编写递增索引,有没有简单的方法可以实现?


9
完整文档可在http://www.lua.org/manual/5.2/ 上找到。 - rsethc
6
哦,这真是太有帮助了。谷歌一直指向http://www.lua.org/pil/2.5.html,但那个链接基本上没什么用。 - drewish
3个回答

166

您正在寻找位于主要库的table部分中的insert函数。

foo = {}
table.insert(foo, "bar")
table.insert(foo, "baz")

1
没错。你也不需要分号,但如果你想要的话可以加上。 - rsethc
1
@rsethc 在 Stack Overflow 的历史上,两个“重复”的答案在某个时刻被同时发布(我敢打赌我们不会是最后一个这样做的人)。为了公平起见,我确实添加了一些关于内存/时间节省的信息。 - AStopher

69
foo = {}
foo[#foo+1]="bar"
foo[#foo+1]="baz"

这是可行的,因为#运算符计算列表的长度。空列表的长度为0,依此类推。
如果您使用Lua 5.3+,则可以几乎完全按照您想要的方式操作:
foo = {}
setmetatable(foo, { __shl = function (t,v) t[#t+1]=v end })
_= foo << "bar"
_= foo << "baz"

在Lua中,表达式不是语句,需要以某种方式使用。


9
它比table.insert稍微快一些。 - Tim
7
值得注意的是,如果__shl函数返回self,则可以进行链式压入操作,例如_= foo << "bar" << "baz" - Neil E. Pearson

14

我个人会使用table.insert函数:

table.insert(a,"b");

这将使您免于必须遍历整个表格,从而节省宝贵的资源,如内存和时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接