在 Lua 编程语言中,数组被称为表。表在 Lua 中用于存储数据。如果您以结构化的方式存储大量数据,那么了解在需要时检索这些数据的选项非常有用。
在 Lua 中创建表
要在 Lua 中创建表,请使用任意名称实例化表
mytable = {}
您可以通过不同的方式在表中构造数据。您可以填充值,本质上是创建一个列表(在某些语言中称为列表)
mytable = { 'zombie', 'apocalypse' }
或者您可以创建一个关联数组(在某些语言中称为映射或字典)。您可以使用点表示法向表中添加任意键。您还可以以与向变量添加值相同的方式向该键添加值
myarray = {}
myarray.baz = 'happy'
myarray.qux = 'halloween'
您可以使用 assert()
函数添加验证
assert(myarray.baz == 'happy', 'unexpected value in myarray.baz')
assert(myarray.qux == 'halloween', 'unexpected value in myarray.qux')
现在您有两个表:列表样式的 mytable
和关联数组样式的 myarray
。
使用 pairs 迭代表
Lua 的 pairs()
函数从表中提取键值对。
print('pairs of myarray:')
for k,v in pairs(myarray) do
print(k,v)
end
这是输出
pairs of myarray:
baz happy
qux halloween
如果表中没有键,Lua 会使用索引。例如,mytable
表包含值 zombie
和 apocalypse
。它不包含键,但 Lua 可以即兴发挥
print('pairs of mytable:')
for k,v in pairs(mytable) do
print(k,v)
end
这是输出
1 zombie
2 apocalypse
使用 ipairs 迭代表
为了考虑到没有键的表很常见这一事实,Lua 还提供了 ipairs
函数。此函数提取索引和值
print('ipairs of mytable:')
for i,v in ipairs(mytable) do
print(i,v)
end
在这种情况下,输出与 pairs
的输出相同
1 zombie
2 apocalypse
但是,请注意当您向 mytable
添加键值对时会发生什么
mytable.surprise = 'this value has a key'
print('ipairs of mytable:')
for i,v in ipairs(mytable) do
print(i,v)
end
Lua 忽略键和值,因为 ipairs
仅检索索引条目
1 zombie
2 apocalypse
但是,键值对已存储在表中
print('pairs of mytable:')
for k,v in ipairs(mytable) do
print(k,v)
end
输出
1 zombie
2 apocalypse
surprise this value has a key
检索任意值
您不必迭代表即可从中获取数据。您可以通过索引或键调用任意数据
print('call by index:')
print(mytable[2])
print(mytable[1])
print(myarray[2])
print(myarray[1])
print('call by key:')
print(myarray['qux'])
print(myarray['baz'])
print(mytable['surprise'])
输出
call by index:
apocalypse
zombie
nil
nil
call by key:
halloween
happy
this value has a key
数据结构
有时,使用 Lua 表比尝试跟踪数十个单独的变量更有意义。一旦您了解如何在语言中构造和检索数据,您就有能力以有组织且安全的方式生成复杂的数据。
评论已关闭。