ルアテーブル
テーブルはLuaのデータ構造であり、配列や辞書などのさまざまなデータ型を作成するのに役立ちます。
Luaテーブルは連想配列を使用します。配列のインデックスには任意のタイプの値を使用できますが、この値をnilにすることはできません。
Luaテーブルのサイズは固定されていません。必要に応じて拡張できます。
Luaは、テーブルを介してモジュール、パッケージ、オブジェクトも解決します。たとえば、string.formatは、「format」を使用してテーブル文字列にインデックスを付けることを意味します。
テーブル(テーブル)構造
コンストラクタは、テーブルを作成および初期化する式です。テーブルはLuaに固有の強力な機能です。最も単純なコンストラクタは{}で、空のテーブルを作成するために使用されます。配列を直接初期化できます:
テーブルaの要素を設定してaをbに割り当てると、aとbの両方が同じメモリを指します。aがnilに設定されている場合、bはtableの要素にもアクセスできます。指定された変数がaを指していない場合、Luaのガベージコレクションメカニズムは対応するメモリをクリーンアップします。
次の例は、上記の説明を示しています。
上記のコード実行結果は次のとおりです。
テーブル操作
以下は、テーブル操作の一般的に使用されるメソッドのリストです。
シリアル番号 | 方法と使用 |
---|---|
1 | table.concat(テーブル[、sep [、開始[、終了]]]): concatはconcatenate(chain、connection)の省略形です。table.concat()関数は、パラメーターで指定されたテーブルの配列部分の開始位置から終了位置までのすべての要素をリストし、指定されたセパレーター(sep)で要素を区切ります。 |
2 | table.insert(table、[pos、] value): テーブルの配列部分の指定された位置(pos)に値がある要素を挿入します。posパラメータはオプションで、デフォルトは配列部分の終わりです。 |
3 | table.maxn(テーブル) テーブル内のすべての正のキー値の中で最大のキー値を指定します。正のキー値を持つ要素がない場合、0が返されます。(このメソッドはLua5.2以降は存在しません。この記事ではカスタム関数の実装を使用しています) |
4 | table.remove(テーブル[、pos]) テーブル配列のpos位置にある要素を返します。後続の要素は前方に移動します。posパラメータはオプションであり、デフォルトはテーブルの長さで、最後の要素から削除されます。 |
5 | table.sort(テーブル[、comp]) 与えられたテーブルを昇順でソートします。 |
次に、これらのメソッドの例をいくつか見ていきます。
テーブル接続
concat()を使用して、要素の連結された文字列をリストに出力できます。
挿入と削除
次の例は、テーブルの挿入と削除の操作を示しています。
テーブルの並べ替え
次の例は、sort()メソッドを使用してTableをソートする方法を示しています。
テーブル最大
table.maxnこのメソッドはLua5.2以降は存在しません。実現するためにtable_maxnメソッドを定義します。
次の例は、テーブルの最大値を取得する方法を示しています。
上記のコードを実行すると、次のように出力されます。
注:インデックスが壊れている場合、総数は不完全です。