表格
表是包含键和值的条目的集合。它们是唯一提供的聚合数据结构。所有其他数据结构(数组、列表、集合等)都是从表中构建的。表键和值可以是任何类型,包括其他表。同一个表中的键和值可以混合类型。
表构造函数
表构造函数允许您指定具有键和关联值的表。语法是:
{[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 = {} –将 t 设置为空表
t[“k1”] = “v1” - 为键“k1”创建条目和值“v1”
v1 = t[“k1”] – — 将 v1 设置为键 “k1” = “v1” 的值
t[“k1”] = “new_v1” — 将键“k1”的值设置为“new_v1”
表格作为数组
传统数组可以使用以整数键作为索引的表来实现。数组可以有任何索引,包括负索引,但惯例是从索引 1 开始数组(不像 C 和 Java 这样的语言那样是 0)。对于这样的数组,有一个特殊用途的表构造函数:
{value1, value2, value3, … }
然后,数组引用是数组 [索引]。
length 运算符 # 返回连续索引从 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 可用于 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 — 将名称设置为“Jane Doe”
本内容的正式版本为英文版。部分 Cloud Software Group 文档内容采用了机器翻译,仅供您参考。Cloud Software Group 无法控制机器翻译的内容,这些内容可能包含错误、不准确或不合适的语言。对于从英文原文翻译成任何其他语言的内容的准确性、可靠性、适用性或正确性,或者您的 Cloud Software Group 产品或服务沿用了任何机器翻译的内容,我们均不作任何明示或暗示的保证,并且适用的最终用户许可协议或服务条款或者与 Cloud Software Group 签订的任何其他协议(产品或服务与已进行机器翻译的任何文档保持一致)下的任何保证均不适用。对于因使用机器翻译的内容而引起的任何损害或问题,Cloud Software Group 不承担任何责任。
DIESER DIENST KANN ÜBERSETZUNGEN ENTHALTEN, DIE VON GOOGLE BEREITGESTELLT WERDEN. GOOGLE LEHNT JEDE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG IN BEZUG AUF DIE ÜBERSETZUNGEN AB, EINSCHLIESSLICH JEGLICHER GEWÄHRLEISTUNG DER GENAUIGKEIT, ZUVERLÄSSIGKEIT UND JEGLICHER STILLSCHWEIGENDEN GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN DRITTER.
CE SERVICE PEUT CONTENIR DES TRADUCTIONS FOURNIES PAR GOOGLE. GOOGLE EXCLUT TOUTE GARANTIE RELATIVE AUX TRADUCTIONS, EXPRESSE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE D'EXACTITUDE, DE FIABILITÉ ET TOUTE GARANTIE IMPLICITE DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON.
ESTE SERVICIO PUEDE CONTENER TRADUCCIONES CON TECNOLOGÍA DE GOOGLE. GOOGLE RENUNCIA A TODAS LAS GARANTÍAS RELACIONADAS CON LAS TRADUCCIONES, TANTO IMPLÍCITAS COMO EXPLÍCITAS, INCLUIDAS LAS GARANTÍAS DE EXACTITUD, FIABILIDAD Y OTRAS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD, IDONEIDAD PARA UN FIN EN PARTICULAR Y AUSENCIA DE INFRACCIÓN DE DERECHOS.
本服务可能包含由 Google 提供技术支持的翻译。Google 对这些翻译内容不做任何明示或暗示的保证,包括对准确性、可靠性的任何保证以及对适销性、特定用途的适用性和非侵权性的任何暗示保证。
このサービスには、Google が提供する翻訳が含まれている可能性があります。Google は翻訳について、明示的か黙示的かを問わず、精度と信頼性に関するあらゆる保証、および商品性、特定目的への適合性、第三者の権利を侵害しないことに関するあらゆる黙示的保証を含め、一切保証しません。
ESTE SERVIÇO PODE CONTER TRADUÇÕES FORNECIDAS PELO GOOGLE. O GOOGLE SE EXIME DE TODAS AS GARANTIAS RELACIONADAS COM AS TRADUÇÕES, EXPRESSAS OU IMPLÍCITAS, INCLUINDO QUALQUER GARANTIA DE PRECISÃO, CONFIABILIDADE E QUALQUER GARANTIA IMPLÍCITA DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO E NÃO INFRAÇÃO.