この初版は Lua 5.0 向けに書かれました。後々のバージョンでも大部分は関連がありますが、多少相違があります。
第 4 版は 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 関数は、配列の指定された位置から要素を削除して (かつ返します)、他の要素を移動してスペースを閉じ、配列のサイズを減少させます。位置を指定せずに呼び出した場合、配列の最後要素が削除されます。

この 2 つの関数を使用して、スタック、キュー、および二方向キューを簡単に実装できます。このような構造は a = {} として初期化できます。プッシュ操作は table.insert(a, x) に相当し、ポップ操作は table.remove(a) に相当します。構造のもう一方の端に挿入するには table.insert(a, 1, x) を使用し、その端から削除するには table.remove(a, 1) を使用します。後者 2 つの操作は、要素を上下に移動する必要があるため、特に効率的ではありません。しかし、table ライブラリはこれらの関数を C で実装するため、これらのループはそれほど高価ではなく、小規模な配列 (たとえば数百要素まで) にはこの実装が十分です。