表格
表是具有键和值的条目的集合。它们是提供的唯一聚合数据结构。所有其他数据结构(数组、列表、集合等)都是从表中构建的。表键和值可以是任何类型,包括其他表。同一表中的键和值可以混合类型。
- 表构造函数
- 表使用情况
- 表格作为数组
- 表格作为记录
表构造函数
表构造函数允许您指定具有键和关联值的表。语法是:
{[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 都是指同一个表
表格使用
正如您所期望的那样,您可以使用键来查找表中的值。语法是表[键],其中表是表引用(通常是分配表的变量),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, … }
然后,数组引用就是[数组索引]。
length 运算符 # 返回连续索引从 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
表格作为记录
带有字段的记录可以作为带有字段名称键的表实现。参考表单 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 = 人[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.