テーブル
テーブルは、キーと値を含むエントリのコレクションです。これらは提供される唯一の集約データ構造です。その他のデータ構造 (配列、リスト、セットなど) はすべてテーブルから構築されます。テーブルのキーと値は、他のテーブルを含め、どのタイプでもかまいません。同じテーブル内のキーと値には型が混在する可能性があります。
- テーブルコンストラクター
- テーブル使用量
- 配列としてのテーブル
- レコードとしてのテーブル
テーブルコンストラクター
テーブルコンストラクターを使用すると、キーと関連する値を含むテーブルを指定できます。構文は次のとおりです。
{[キー1] = 値 1, [キー 2] = 値 2,…}
キーと値は式です。キーが予約語ではない文字列の場合、キーを囲む括弧と引用符は省略できます。例:
{key1 = “value1”, key2 = “value2”, key3 = “value3”}
空のテーブルは {} だけで指定できます。
テーブルコンストラクターを代入に使用して、テーブルを参照する変数を設定できます。例:
local t1 = {} – set t1 to an empty table local t2 = {key1 = “value1”, key2 = “value2”, key3 = “value3”}
テーブル自体は匿名であることに注意してください。複数の変数が同じテーブルを参照する場合があります。上記の例を続けます。
ローカル t3 = t2–t2 と t3 の両方が同じテーブルを参照しています
テーブル使用量
期待どおりに、キーを使用してテーブル内の値を検索できます。構文は table [key] です。ここで table はテーブル参照 (通常はテーブルに割り当てられた変数) で、key はキーを提供する式です。これが式で使用され、キーがテーブルに存在する場合、キーに関連付けられた値が返されます。キーがテーブルにない場合は nil を返します。これを代入の変数として使用しても、キーがテーブルに存在しない場合、キーと値の新しいエントリが作成されます。キーがテーブルにすでに存在する場合、キーの値を新しい値に置き換えます。例:
local t = {}–t を空のテーブル t [“k1”] =「v1” に設定します–キー「k1」と値「v1” = t [” k1”] のエントリを作成します–v1 をキー「 k1」=「v1” t [” k1”] =「new_v1”–キー「k1” の値を設定します」から「 新規_v1」
配列としてのテーブル
従来の配列は、整数キーをインデックスとするテーブルを使用して実装できます。配列には負のインデックスを含めて任意のインデックスを付けることができますが、慣例としては、配列はインデックス 1 から始まります (C や Java のような言語のように 0 ではありません)。このような配列には特別な用途のテーブルコンストラクタがあります。
{value1, value2, value3, … }
その場合、配列参照は配列 [インデックス] になります。
長さ演算子#は、1から始まる連続したインデックスを持つ配列の要素の数を返します。例:
local a = {“value1”, “value2”, “value3”} local length = #a – sets length to the length of array a = 3
配列は、定義された要素のみが割り当てられるスパース配列でもかまいません。ただし、# は、連続しないインデックスを持つスパース配列では使用できません。例:
local sparse_array = {}–空の配列をセットアップ sparse_array [1] =「value1”–インデックス 1 に要素を追加 sparse_array [99] =「value99」–インデックス 99 に要素を追加
多次元配列は、テーブルのテーブルとして設定できます。たとえば、3x3 マトリックスは次のように設定できます。
local m = {
{1, 2, 3}, {4, 5, 6}, {7, 8, 9} }
local v22 = m[2][2] – sets v22 to 5
レコードとしてのテーブル
フィールドを持つレコードは、フィールド名キーを持つテーブルとして実装できます。参照フォームの table.field はテーブル [“field”] に使用できます。例:
local person = {name = “John Smith”, phone = “777-777-7777”} local name = person.name – sets name to “John Smith”
テーブルの配列をレコードのシーケンスに使用できます。例:
local people = { {name = “John Smith”, phone = “777-777-7777”}, {name = “Jane Doe”, phone = “888-888-8888”} … }
名前 = 人 [2] .name–名前を「Jane Doe」に設定します