テーブル

テーブルは、キーと値を持つエントリのコレクションです。これらは、提供される唯一の集約データ構造です。他のすべてのデータ構造(配列、リスト、セットなど)はテーブルから構築されます。テーブルのキーと値は、他のテーブルを含む任意の型にすることができます。同じテーブル内のキーと値は、型を混在させることができます。

  • テーブルコンストラクタ
  • テーブルの使用状況
  • 配列としてのテーブル
  • レコードとしてのテーブル

テーブルコンストラクタ

テーブルコンストラクタを使用すると、キーと関連する値を持つテーブルを指定できます。構文は次のとおりです。

{[key1] = value1, [key2] = value2, …}

キーと値は式です。キーが予約語でない文字列の場合、キーの前後の角かっこと引用符は省略できます。例:

{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 = {} – sets t to an empty table t[“k1”] = “v1” – creates an entry for key “k1” and value “v1” v1 = t[“k1”] – sets v1 to the value for key “k1” = “v1” t[“k1”] = “new_v1” – sets the value for key “k1” to “new_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 = {} – set up an empty array sparse_array[1] = “value1” – add an element at index 1 sparse_array[99] = “value99” – add an element at index 99

多次元配列は、テーブルのテーブルとして設定できます。たとえば、3x3 マトリックスは次のように設定できます。

local m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9} } local v22 = m[2][2] – sets v22 to 5

レコードとしてのテーブル

フィールドを持つレコードは、フィールド名キーを持つテーブルとして実装できます。テーブル[“field”]には、参照フォームtable.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”} … }

name = people[2].name – sets name to “Jane Doe”

テーブル