6.6 テーブル操作

このライブラリはテーブルの操作のための一般的な関数を提供します。全ての関数は table テーブルの中に公開されます。

テーブルの長さを使う操作では長さ演算子に関する注意事項 (§ 3.4.7) がそのまま当てはまります。そういった関数は引数のテーブルが持つ数値でないキーを無視します。

table.concat (list [, sep [, i [, j]]])

全てのバリューが文字列または数値であるテーブルを受け取り、文字列 list[i] .. sep .. list[i+1] ... sep .. list[j] を返します。デフォルトでは sep は空文字列で、i, j はそれぞれ 1, #list です。ij より大きい場合は空文字列が返ります。

table.insert (list, [pos,] value)

list のキー pos に対応するバリューとして value を挿入し、元々あった list[pos], list[pos+1], ..., list[#list] を一つ上に移動させます。pos のデフォルトの値は #list + 1 であり、table.insert(t,x) を呼ぶとリスト t の終端に x が挿入されます。

table.move (a1, f, e, t [,a2])

複数代入 a2[t] ... = a1[f], ..., a1[e] と等価な処理によってテーブル a1 の要素をテーブル a2 に移動させます。a2 のデフォルトの値は a1 です。移動元の区間と移動先の区間は重なっても構いません。移動される要素の数は Lua の整数に収まる必要があります。

移動先のテーブル a2 を返します。

table.pack (...)

引数の値をキー 1, 2, ... に対応するバリューとして持ち、引数の数を "n" フィールドに持つ新しいテーブルを返します。引数に nil が含まれるときは作られるテーブルが列でないことに注意してください。

table.remove (list [, pos])

list の位置 pos にある要素を取り除き、取り除いた要素の値を返します。さらに pos が 1 から #list の間の整数なら list[pos+1], list[pos+2], ..., list[#list] を一つ下に移動させ、list[#list] を削除します。インデックス pos には #list + 1 を指定することもでき、#list が 0 のときは 0 としても構いません1

pos のデフォルトの値は #list です。そのため table.remove(l) はリスト l の最後の要素を削除します。

table.sort (list [, comp])

リストの要素 (list[1] から list[#list]) を与えられた順序でインプレースにソートします。comp が与えられるなら、comp は二つの要素を受け取り最終的な順序において一つ目の要素が二つ目の要素より前に来るときに限って true を返す関数である必要があります (つまりソートの後では i < jnot comp(list[j],list[i]) を意味します)。comp が与えられなければ通常の < 演算子が使われます。

comp 関数はリストの要素に関する狭義半順序 (strict partial order) を定義する必要があります。つまり comp には反対称律と推移律が必要です2。この条件がないとソートを行うことができません。

この関数が使うソートアルゴリズムは安定ではありません。与えられた順序において等しいとみなされる要素であっても、ソートによって相対的な位置関係が変化する可能性があります。

table.unpack (list [, i [, j]])

与えられたリストの要素を返します。この関数は次と等価です:

return list[i], list[i+1], ..., list[j]

ij のデフォルトの値はそれぞれ 1 と #list です。


  1. 訳注: remove に存在しないインデックスを渡すと通常はエラーが起こるが、この二つの場合にはエラーが起きないということ。このときテーブルは変化せず、removenil を返す。[return]

  2. 訳注: 数学的に言えば狭義半順序には非反射律も必要だが、これはインデックスの比較によって提供される。[return]