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
です。i
が j
より大きい場合は空文字列が返ります。
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 < j
が not 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]
i
と j
のデフォルトの値はそれぞれ 1 と #list
です。