pairs() vs. ipairs()
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 3 de 54.
Agora que você aprendeu tanto pairs() quanto ipairs(), é importante entender quando usar cada um. A escolha depende inteiramente da estrutura da sua tabela e do que você está tentando realizar.
Use ipairs() quando você tem uma tabela estilo lista com chaves inteiras sequenciais começando em 1. Ele processa os elementos em ordem e para no primeiro valor nil, tornando-o perfeito para arrays onde a ordem importa.
Use pairs() quando sua tabela tiver chaves de string, tipos de chave mistos ou quando você precisar acessar todas as entradas, independentemente de lacunas. Ele itera por cada par chave-valor na tabela sem nenhuma ordem específica.
Considere esta tabela mista:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}Se você usar ipairs(), verá apenas as três strings de nível. Se você usar pairs(), verá todas as cinco entradas, incluindo as chaves de string.
Desafio
FácilEscreva uma função countSequentialItems que recebe uma tabela data e retorna a contagem de itens sequenciais com chaves inteiras.
Use ipairs() para contar quantos itens existem na parte sequencial da tabela (começando do índice 1 até o primeiro nil). Isso ajudará você a entender a diferença entre ipairs() e pairs() ao trabalhar com tabelas mistas.
Parâmetros:
data(tabela): Uma tabela mista contendo tanto chaves inteiras sequenciais quanto chaves de string
Retorna: O número de itens sequenciais (número)
Folha de consulta
Use ipairs() para tabelas do tipo lista com chaves inteiras sequenciais começando em 1. Ele processa os elementos em ordem e para no primeiro valor nil:
for i, value in ipairs(myList) do
-- processa apenas itens sequenciais
endUse pairs() para tabelas com chaves de string, tipos de chave mistos ou quando você precisar acessar todas as entradas, independentemente de lacunas. Ele itera por cada par chave-valor sem uma ordem específica:
for key, value in pairs(myTable) do
-- processa todos os pares chave-valor
endExemplo com uma tabela mista:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}
-- ipairs() vê apenas: "Level 1", "Level 2", "Level 3"
-- pairs() vê todas as cinco entradasExperimente você mesmo
function countSequentialItems(data)
-- 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