第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些区别。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目


19.2 – 插入和删除

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 中实现了这些函数,因此这些循环不会太昂贵,并且此实现对于小数组(比如最多一百个元素)来说已经足够好了。