Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Escreva 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
end

Use 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
end

Exemplo 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 entradas

Experimente você mesmo

function countSequentialItems(data)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

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