このページの内容

6.7 – テーブル操作

このライブラリは、テーブル操作のための汎用関数を提供します。すべての関数はテーブルtable内にあります。

操作でテーブルの長さが必要になる場合は常に、長さ演算子に関するすべての注意事項が適用されることを覚えておいてください(§3.4.7を参照)。すべての関数は、引数として渡されたテーブル内の数値でないキーを無視します。


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

すべての要素が文字列または数値であるリストを受け取り、文字列list[i]..sep..list[i+1] ··· sep..list[j]を返します。sepのデフォルト値は空文字列、iのデフォルトは1、jのデフォルトは#listです。ijより大きい場合は、空文字列を返します。


table.create (nseq [, nrec])

メモリを事前に割り当て、新しい空のテーブルを作成します。テーブルの要素数が事前に分かっている場合、この事前割り当ては性能の向上とメモリの節約に役立つことがあります。

引数nseqは、テーブルがシーケンスとして持つ要素数のヒントです。省略可能な引数nrecは、テーブルが持つほかの要素数のヒントで、デフォルトは0です。


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

listの位置posに要素valueを挿入し、要素list[pos],list[pos+1],···,list[#list]を後ろへずらします。posのデフォルト値は#list+1なので、呼び出しtable.insert(t,x)xをリストtの末尾へ挿入します。


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

テーブルa1からテーブルa2へ要素を移動し、次の多重代入と等価な操作を行います:a2[t],··· = a1[f],···,a1[e]a2のデフォルトはa1です。コピー先の範囲はコピー元の範囲と重なっていても構いません。移動する要素数はLua整数に収まらなければなりません。feより大きい場合、何も移動しません。

コピー先テーブル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]を消去します。#listが0の場合、インデックスposは0でもよく、また#list + 1でも構いません。

posのデフォルト値は#listなので、呼び出しtable.remove(l)はリストlの最後の要素を削除します。


table.sort (list [, comp])

リストの要素を、list[1]からlist[#list]まで指定された順序でその場でソートします。compを指定する場合、これは2つのリスト要素を受け取り、最終的な順序で第1要素が第2要素より前に来る必要があるときにtrueを返す関数でなければなりません。したがって、ソート後にはi <= jならnot comp(list[j],list[i])となります。compを指定しない場合は、代わりにLuaの標準演算子<が使われます。

関数compは一貫した順序を定義しなければなりません。より形式的には、関数は狭義弱順序を定義する必要があります。(弱順序は全順序に似ていますが、比較上は異なる要素を同等とみなせます。)

ソートアルゴリズムは安定ではありません。指定された順序で等しいとみなされる異なる要素は、ソートによって相対位置が変わる可能性があります。


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

指定されたリストから要素を返します。この関数は次と等価です。

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

デフォルトでは、iは1、j#listです。