Presente em várias linguagens de programação, o tipo de dado derivado vetor/array também está presente na linguagem Lua. As sintaxes para declaração seguem abaixo:

Sintaxe 1 : Vetor
[local] [tipo_dado] ]nome_variavel = {valor1,valor2,valorN}
Sintaxe 2: Matriz
[local] [tipo_dado] ]nome_variavel = {{valor1,valor2,valorN},{valor1,valor2,valorN}}
Exemplo 1
local int meu_vetor = {1,2,3}
local minha_matriz = {{1,2},{3,4}}
Saída
-

É muito importante mencionar que em Lua os vetores não são baseados em índice zero como em várias linguagens estilo-C. O índice ou posição inicial de um vetor ou matriz é iniciado em 1.

O acesso e alteração de valores em um vetor ou matriz é feito utilizando seus índices ou posições em conjunto com o indexador [] como é feito em várias linguagens.

Sintaxe
nome_variavel[indice]
Exemplo 2
local vet = {1,2,3}
local mat = {{1,2},{3,4}}
print("Acessando Vetor")
print(vet[1])
print(vet[2])
print(vet[3])

print("Acessando Matriz")
print(mat[1][1])
print(mat[1][2])
print(mat[2][1])
print(mat[2][2])
Saída
Acessando Vetor
1
2
3
Acessando Matriz
1
2
3
4

A alteração de matrizes e vetores é feita acessando a posição desejada e atribuindo um novo valor com o operador de atribuição (=).

Sintaxe 3 : Vetor
nome_variavel[indice] = valor
Sintaxe 4 : Matriz
nome_variavel[linha][coluna] = valor
Exemplo 3
local vet = {}

vet[1]=-1
vet[2]=-2
vet[3]=-3

print("Acessando Vetor")
print(vet[1])
print(vet[2])
print(vet[3])
Saída
Acessando Vetor
-1
-2
-3

Para percorrermos o conteúdo de uma vetor para manipular seu conteúdo, utilizamos o comando for já estudado.

Exemplo 3
local int meu_vetor = {1,2,3}
local minha_matriz = {{1,2},{3,4}}

--percorrendo vetor
print("Vetor")
for i = 1,3,1  do
   print(meu_vetor[i])
end

print("\nMatriz")

--percorrendo matriz
for i = 1,2,1  do
   for j = 1,2,1  do
   print(minha_matriz[i][j])
   end
  print("\n")
end
Saída
Vetor
1
2
3

Matriz
1
2


3
4

Anteriormente, estudamos o operador # que é utilizado para retornar o tamanho de uma string. Porém, esse mesmo operador pode ser utilizado para retornar o tamanho de vetores e matrizes.

Para vetores, utilizamos o operador # como na sintaxe abaixo:

Sintaxe
#nome_variavel
#(nome_variavel)
Exemplo 4
local vet = {1,2,3}

print(#vet)
print(#(vet))
Saída
3
3

Para matrizes, utilizamos # da seguinte forma:

Sintaxe
#(nome_variavel) -- número de linhas
#(nome_variavel[1]) -- número de colunas
Exemplo 5
local mat = {{4,5,6},{7,8,9}}

print(#(mat)) --linhas
print(#(mat[1])) --colunas
Saída
2
3

A passagem de vetores/matrizes como argumento para funções e métodos, por padrão, é feita por referência sem que haja necessidade de utilizar ponteiros como em outras linguagens como C, Go e Rust.

Exemplo 6
function funcao(mat)
  print(#(mat)) --linhas
  print(#(mat[1])) --colunas
end

function funcao2(vet)
  print(#(vet)) --linhas
end

local mat = {{4,5,6},{7,8,9}}
local vet = {1,2,3}

print("Passando matriz como argumento")
funcao(mat)
print("Passando vetor como argumento")
funcao2(vet)
Saída
Passando matriz como argumento
2
3
Passando vetor como argumento
3

O retorno do tipo de dado vetor ou matriz não possui nenhum mistério. Graças à forma com a linguagem Lua lida com esses dados, é apenas necessário retornar uma variável declarada como vetor ou matriz.

Exemplo 7
function funcao()
  local vet = {1,2,3}
  return vet;
end

local vet = funcao()

print("tamanho:",#vet)
print("[1]:",vet[1])
print("[2]:",vet[2])
print("[3]:",vet[3])
Saída
tamanho:	3
[1]:	1
[2]:	2
[3]:	3
  1. 12/09/2024 - revisão 3 - Adição de sintaxe # para matriz, ajustes gramaticais
  2. 30/08/2024 - revisão 2 - Correção em links de objetivos
  3. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  4. 26/05/2023 - versão inicial