数据结构
Lua语言中提供的表并不是一种数据结构,我们可以用它来构造其他的数据结构,如数组、记录、列表、队列、集合等。
数组
在Lua语言中,简单地使用整型数来作为索引即可实现数组,而且数组的大小并非是固定的,可以按需增长。
local a = {}
for i = 1, 1000 do
a[i] = 0
end
上述代码就实现了一个简单的数组。虽然我们可以用0、1或其他任何值来作为数组的起始索引,在Lua语言中一般以1位数组的起始索引,标准库和长度运算符都遵循该惯例
矩阵及多维数组
Lua语言中,有两种方式来表示矩阵。
第一种方式是使用一个不规则数组,即数组的数组,也就是一个所有元素均是另一个表的表。
local mt = {}
for i = 1, N do
local row = {}
mt[i] = row
for j = 1, M do
row[j] = 0
end
end
由于表在Lua语言中是一种对象,因此在创建矩阵时必须显示地创建每一行。
第二种方式则是将两个索引合并为一个。
local mt = {}
for i = 1, N do
local aux = (i-1) * N
for j = 1, M do
mt[aux+j] = 0
end
end
可以使用pairs来遍历矩阵中非nil的元素
function mult(a, b)
local c = {}
for i = 1, #a do
local resultline = {}
for k, va in pairs(a[i]) do
for j, vb in pairs(b[k] do
local res = (resultline[j] or 0) + va * vb
resultline[j] = (res ~= 0) and res or nil
end
end
c[i] = resultline
end
return c
end