Iterando com ipairs()
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 2 de 54.
Enquanto o pairs() funciona com qualquer estrutura de tabela, Lua fornece uma função especializada chamada ipairs() projetada especificamente para tabelas do tipo lista. Esta função itera pelas tabelas em ordem sequencial, começando do índice 1 e continuando até encontrar um valor nil.
A sintaxe para ipairs() é semelhante a pairs():
for index, value in ipairs(myList) do
-- use index e value aqui
endAqui está um exemplo com uma lista de itens de missão:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
endSaída:
1. Map
2. Compass
3. Torch
4. RopeA principal diferença em relação ao pairs() é que o ipairs() para imediatamente quando encontra um valor nil, mesmo que existam mais elementos depois dele.
Desafio
FácilEscreva uma função listTasks que recebe uma tabela tasks e retorna uma string formatada listando todas as tarefas com seus números de posição.
Use ipairs() para iterar pelas tarefas em ordem sequencial e construir uma string onde cada linha mostra o número da tarefa seguido pelo nome da tarefa no formato number. task. Cada tarefa deve estar em uma linha separada.
Parâmetros:
tasks(table): Uma tabela do tipo lista contendo nomes de tarefas como strings
Retorno: Uma string com cada tarefa numerada em uma linha separada. Formato:
1. task1
2. task2
3. task3Folha de consulta
ipairs() percorre tabelas do tipo lista em ordem sequencial, começando do índice 1 e parando no primeiro valor nil:
for index, value in ipairs(myList) do
-- use o índice e o valor aqui
endExemplo:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
end
-- Saída:
-- 1. Map
-- 2. Compass
-- 3. Torch
-- 4. RopeDiferença principal: Ao contrário de pairs(), o ipairs() para imediatamente quando encontra um valor nil, mesmo que existam mais elementos depois dele.
Experimente você mesmo
function listTasks(tasks)
-- Escreva o código aqui
end
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Iteração Avançada de Tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de Personagem2Mais Funções da Biblioteca Table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRecapitulação - Placar de recordes