lua 表构造器
表构造器(Table Constructor)是用来创建和初始化表达式的。
空构造器
最简单的构造器是空构造器{}。
表构造器也可以用来初始化列表。
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
构造器的第一个元素的索引是1,不是0, 所以datys[1] = "Sunday"。
初始化记录式表
a = {x = 110, y = 20}
等价于
a = {}
a.x = 110
a.y = 20
混合记录式(record-style)和列表式(list-style)
polyline = {
color = "blue",
thickness = 2,
{x = 0, y = 0}, -- polyline[1]
{x = 1, y = 1}, -- polyline[2]
}
key值是字符串的时候是不需要加引号的。
数组、列表、序列
数组和列表直接使用整型作为索引即可。
获取序列的长度使用#
。
序列是连续的,中间不能有nil值。
a = {1, 2, 3, 4, 5}
for i=1, #a do
print(a[i])
end
print(a[#a]) -- 输出最后一个元素
a[#a] = nil -- 删除最后一个元素
a[#a + 1] = 'v' -- 在最后增加一个元素 v
对于不连续的序列使用#
操作是不可靠的.
> a = {10, 20, 30, nil, nil}
> #a
3
遍历表
可以使用pairs
迭代器遍历表中的键值对。
t = {10, print, x = 12, k = 'hi'}
for k, v in pairs(t) do
print(k, v)
end
1 10
2 function: 0x555ce712cd90
x 12
k hi
遍历打印的顺序可能是随机的。但是每一个元素只会出现一次。
对于列表而言,可以使用ipairs
迭代器。
t = {10, print, x = 12, k = 'hi'}
rint("=======================")
for k, v in ipairs(t) do
print(k, v)
end
-- 只有前两个元素符合列表,所以只打印前两个元素
=======================
1 10
2 function: 0x555afadd3d90
使用for
循环遍历。
print("***********************")
for i = 1, #t do
print(i, t[i])
end
-- 只有前两个元素符合列表,所以只打印前两个元素
=======================
1 10
2 function: 0x555afadd3d90
从上面可以得出,对于序列可以使用for
, ipairs
进行遍历,对于字符、混合类型为key
的表只能使用pair
进行遍历。