Sign in to follow this  
Stanley Sathler

Navegando pelos elementos de uma tabela

Recommended Posts

Olá pessoal,

Venho vendo que a comunidade brasileira/portuguesa presente aqui no fórum é um tanto quanto desunida. Mesmo assim, quando alguém tenta se manifestar, alguns usuários fanfarrões acabam por tornar todo um debate em uma fútil discussão.

De qualquer forma, meu objetivo aqui não é empregar política de convivência entre os membros. Venho através deste proporcionar um primeiro tutorial de uma série que está por vir - ou pelo menos planejo isso, fazendo-os quando sobrar tempo.

* Neste tutorial irei explicar sobre o conhecido (e comumente usado) in ipairs(), um "loop" que percorre todos os ítens de uma tabela (vetor).

-

1 - Iniciando - Conhecendo as tabelas

As tabelas (ou vetores, assim conhecido em outras linguagens) é uma variável que armazena um conjunto de valores que podem ser acessados através de um índice. Suponhamos que temos em um quarto um armário com 3 gavetas, onde cada gaveta possui um nome:

• gaveta_1 = "cuecas"

• gaveta_2 = "meias"

• gaveta_3 = "camisas"

Para evitar criar uma variável para cada gaveta, poderíamos simplesmente criar uma tabela:

 gavetas = {} 

Para atribuirmos valores a tabela, adicionamos cada valor separado por vírgula:

gavetas = { "cuecas", "meias", "camisas" } 

Sendo assim, temos uma tabela com três índices: índice 1 (cuecas), índice 2 (meias), índice 3 (camisas). Para acessarmos cada índice, usamos o nome da variável seguido do valor respectivo ao índice entre colchetes (variavel[n_indice]):

gavetas = { "cuecas", "meias", "camisas" } 
outputChatBox("Item 1: " .. gavetas[1] .. " | Item 2: " .. gavetas[2] .. " | Item 3: " .. gavetas[3]) 

O resultado seria:

Item 1: cuecas | Item 2: meias | Item 3: camisas 

2 - Percorrendo os valores da tabela utilizando in ipairs()

O exemplo anterior poderia ter sido exemplificado. Imaginamos agora uma tabela com 50 índices. Se quiséssemos escrever TODOS os valores (do índice 1 ao índice 50), necessitaríamos de uma boa parte do tempo para escrever tudo (gavetas[1], gavetas[2], gavetas[3], gavetas[4], gavetas[5], etc).

Para facilitar, poderíamos usar o in ipairs(). Este tem como finalidade percorrer, automaticamente, cada ítem da tabela jogando-a a uma variável (definida por você). Ou seja: ela percorre o primeiro ítem da tabela, joga na variável que você definiu e executa um bloco de instruções (no exemplo, escrever o valor no chat). Após isto, volta a realizar a mesma tarefa, porém percorrendo o segundo ítem e assim por diante.

Escrevendo o exemplo acima usando in ipairs(), seria:

  
gavetas = { "cuecas", "meias", "camisas" } 
  
-- Sintaxe: for i, v in ipairs(nome_tabela) do {} 
for i, dentro_gaveta in ipairs(gavetas) do 
      outputChatBox("Item "..i..": " .. dentro_gaveta) 
end 
  
  

Resultado:

Item 1: cuecas | Item 2: meias | Item 3: camisas 

Assim, no primeiro loop, "i" assumiria o valor "1" (número do índice em que está posicionado o in ipairs()); "dentro_gaveta" assumiria o valor "cuecas", que é o valor definido para o primeiro item da tabela; dentro do bloco temos a função outputChatBox(), responsável por escrever os valores na tela (chat).

Após executar o bloco de instruções, o in ipairs() passa a apontar então para o próximo ítem (no caso, o segundo ítem), efetuando a mesma tarefa.

3 - Exercícios resolvidos

1) Crie uma tabela com 5 índices e atribua à cada índice o nome de uma fruta. Em seguida, apresente na tela o nome dessas frutas.

Resolução)

local frutas = { "maca", "laranja", "banana", "melancia", "ameixa" } 
  
for i, nome_fruta in ipairs(frutas) do 
      outputChatBox(nome_fruta) 
end 
  

4 - Exercícios para praticar

1) Crie uma tabela com 8 índices e atribua a cada índice o nome de uma pessoa. Em seguida, apresente na tela o nome de cada um deles.

2) Crie duas tabelas com 5 índices. Na primeira tabela, insira uma idade qualquer (número inteiro) para cada ítem. Em seguida, passe o valor do primeiro índice da primeira tabela para o primeiro índice da segunda tabela e assim por diante. Utilize in ipairs() para isso.

---------------------------------------------------

5 - Conclusão

Bom pessoal, podemos ver que este é um tutorial básico, apresentando um conceito básico de programação em Lua. O objetivo deste é auxiliar os iniciantes que não conseguem entender ou manusear o recurso, a fim de aprimorá-los.

Caso queiram praticar, podem resolver os dois exercícios propostos além claro de desenvolver o seu próprio desafio. O intuito é realmente aprender, compartilhar. :)

Qualquer dúvida, sintam-se a vontade para debater neste mesmo tópico.

Abraços,

Stanley Sathler.

Share this post


Link to post

Esqueça que criar novo table no table? Por exemplo:

local tables = {} 
tables["frutas"] = { "maca", "laranja", "banana", "melancia", "ameixa" } 
  
for i, nome_fruta in ipairs(tables["frutas"]) do 
      outputChatBox(nome_fruta) 
end 

(Nao testei)

Share this post


Link to post
Esqueça que criar novo table no table? Por exemplo:
local tables = {} 
tables["frutas"] = { "maca", "laranja", "banana", "melancia", "ameixa" } 
  
for i, nome_fruta in ipairs(tables["frutas"]) do 
      outputChatBox(nome_fruta) 
end 

(Nao testei)

E porque isso seria necessário? Bem mais fácil criar uma tabela "frutas", não é necessário ficar criando mais tabelas..

Share this post


Link to post

Não há necessidade de criar uma nova tabela. a forma que Stanley fez já está bem, embora o código teria que ser um pouco mais organizado..

Share this post


Link to post
Não há necessidade de criar uma nova tabela. a forma que Stanley fez já está bem, embora o código teria que ser um pouco mais organizado..

Não vejo o que mais organizar...

Share this post


Link to post
Não há necessidade de criar uma nova tabela. a forma que Stanley fez já está bem, embora o código teria que ser um pouco mais organizado..

Não vejo o que mais organizar...

Na verdade, o código poderia ser mais complementado, mas como eu disse a forma que Stanley fez já está bem, quanto a organização, o 'teria' que eu disse, foi um pequeno erro. Alias, deixando claro uma coisa, sempre da para melhorar algo, no caso complementar ficaria bom.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.