此初版是為 Lua 5.0 所撰寫。儘管對於後續版本來說仍有很大的關聯性,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 及其他書店購買。
購買此書,您也同時幫助 支援 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 = {}。推入操作等於 table.insert(a, x);彈出操作等於 table.remove(a)。若要插入到結構的另一端,我們使用 table.insert(a, 1, x);若要從那一端移除,我們使用 table.remove(a, 1)。最後兩個操作並非特別有效率,因為它們必須將元素向上或向下移動。然而,由於 table 函式庫使用 C 來實作這些函式,因此這些迴圈不會太耗費資源,而且此實作對於小型陣列(例如,最多一百個元素)來說已經夠好了。