第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些区别。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目。
用 Lua 编程 | ||
第三部分。标准库 第 19 章。表库 |
table
库提供函数来插入和删除列表任意位置的元素。table.insert
函数在数组的给定位置插入一个元素,向上移动其他元素以腾出空间。此外,insert
会增加数组的大小(使用 setn
)。例如,如果 a
是数组 {10, 20, 30}
,则在调用 table.insert(a, 1, 15)
之后,a
将变为 {15, 10, 20, 30}
。作为一个特殊(且常见)的情况,如果我们在不指定位置的情况下调用 insert
,它将在数组的最后一个位置插入元素(因此不会移动任何元素)。例如,以下代码逐行读取程序输入,并将所有行存储在一个数组中
a = {} for line in io.lines() do table.insert(a, line) end print(table.getn(a)) --> (number of lines read)
table.remove
函数从数组的给定位置删除(并返回)一个元素,向下移动其他元素以关闭空间并减小数组的大小。当在不指定位置的情况下调用时,它将删除数组的最后一个元素。
有了这两个函数,实现栈、队列和双端队列就非常简单了。我们可以将此类结构初始化为 a = {}
。一个 push 操作等效于 table.insert(a, x)
;一个 pop 操作等效于 table.remove(a)
。要在结构的另一端插入,我们使用 table.insert(a, 1, x)
;要从该端删除,我们使用 table.remove(a, 1)
。最后两个操作效率不高,因为它们必须向上和向下移动元素。但是,由于 table
库在 C 中实现了这些函数,因此这些循环不会太昂贵,并且此实现对于小数组(比如最多一百个元素)来说已经足够好了。
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |