桌子

表是带有键和值的条目的集合。它们是提供的唯一聚合数据结构。所有其他数据结构(数组、列表、集等)都是从表构建的。表键和值可以是任何类型,包括其他表。同一表中的键和值可以混合类型。

  • 表构造函数
  • 表的使用
  • 表作为阵列
  • 表记录

表构造函数

表构造函数允许您使用键和关联值指定表。语法是:

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

键和值是表示的。如果键是不是保留单词的字符串,则可以省略钥匙周围的括号和引号。例子:

{key1 =“value1”,key2 =“value2”,key3 =“value3”}

仅由{}指定空表。

可以在分配中使用表构造函数以设置变量以引用表。例子:

本地t1 = {} - 将t1设置为空表本地t2 = {key1 =“value1”,key2 =“value2”,key3 =“value3”}

注意,表本身是匿名的。多个变量可以引用同一个表。继续上面的例子:

本地T3 = T2 - T2和T3都参考同一表

表用法

如您所料,您可以使用键来查找表中的值。语法是table[key],其中table是一个表引用(通常是分配给表的变量),而key是提供键的表达式。如果在表达式中使用了this,并且该键存在于表中,则返回与该键关联的值。如果键不在表中,则返回nil。如果将它用作赋值中的变量,并且键在表中不存在,则为键和值创建一个新条目。如果键已经存在于表中,则用新值替换键的值。例子:

本地t = {} - 将t到空表t [“k1”] =“v1” - 为键“k1”和值“v1”v1 = t [“k1”]创建一个条目 - 将v1设置为值对于key“k1”=“v1”t [“k1”] =“new_v1” - 将关键“k1”的值设置为“new_v1”

表作为阵列

传统的数组可以使用具有整数键作为索引的表来实现。数组可以有任何下标,包括负数,但约定是从下标1开始(而不是像C和Java这样的语言从0开始)。这类数组有一个特殊用途的表构造函数:

{value1,value2,value3,...}

然后阵列引用然后是阵列[index]。

长度操作符#返回数组中从1开始的连续下标的元素个数。例子:

本地A = {“value1”,“value2”,“value3”}本地长度= #a - 设置长度a = 3的长度

数组可以是稀疏的,只有所定义的元素被分配。但#不能在具有非连续索引的稀疏阵列上使用。例子:

本地的sparse_array ={} -设置一个空数组sparse_array[1] = " value1 " -添加一个元素在索引1 sparse_array[99] = " value99 " -添加一个元素在索引99

多维数组可以设置为表的表。例如,一个3x3的矩阵可以通过以下方式建立:

本地m ={{1,2,3},{4,5,6},{7,8,9}}本地V22 = M [2] [2] - 将V22设置为5

表作为记录

具有字段的记录可以作为具有字段名称密钥的表来实现。参考表格表.Field可用于表[“字段”]。例子:

local person = {name = " John Smith ", phone = " 777-777-7777 "} local name = person.name -设置name为" John Smith "

一个表数组可以用于一个记录序列。例子:

当地人= {{name =“John Smith”,Phone =“777-777-77777”},{name =“Jane Doe”,手机=“888-888-8888”} ...}

名称=人[2] .name - 将名称设置为“Jane Doe”

桌子