[Lua] Qual a diferença de 'in pairs' e 'in ipairs'?

ipairs

O ipairs() retorna um iterador de pares chave-valor ordenado. Ele só itera a partir de chaves númericas, precisando ser necessariamente sequenciais, começando do 1 e não tendo nenhum furo entre as chaves.

pairs

Já o pairs() retorna um iterador de ordem arbitrária, ele funciona independente da chave estabelecida, podendo ser de qualquer tipo.

Veja um exemplo para entender as diferenças:

local table = {
    var = 2,
    var1 = 1,
    'usb',
    'keyword',
    [3] = 'vscode',
    [5] = 'Deschamps',
    [6] = 'tabnews'
}

print('pairs:')
for index, value in pairs(table) do
    print(index, value)
end

print('\nipairs:')
for index, value in ipairs(table) do
    print( index, value)
end

Saidas:

pairs:
+ 1 usb
+ 2 keyword
+ var 2
+ var1 1
+ 3 vscode
+ 5 Deschamps
+ 6 tabnews

ipairs:
+ 1 usb
+ 2 keyword
+ 3 vscode