Roblox Scripting Assistance - Resources

Join our Discord!

Pairs vs IPairs

< Back to overview
< View all authors
< View all categories

pairs internally uses next (in Base Lua, in Luau they use a custom internal iterator).
pairs works on array’s and dictionary’s since it doesn’t have a determined order.

ipairs numerically indices the table (1, 2, 3, ..., n: where n is the length of the table), which is why it only works on tables with numeric indices (or array’s).
ipairs STOPS on nil values.

The iterator for pairs looks like.. (in Vanilla Lua, we don’t know about Luau because they haven’t released their internal iterator)

function pairs(t)
    return next, t, nil --// `nil` is generally avoided since it increases the performance of the loop
end

The iterator for ipairs looks like..

function iter(a, i)
    i = i + 1
    local v = a[i]
    if v ~= nil then
        return i, v
    end
end
    
function ipairs(a)
    return iter, a, 0
end

Fun Fact: If you manually set the array-type indices, Lua will think of it as a dictionary instead when iterating with pairs. Still behaves like an array though.

local array = {
  [1] = "A",
  [2] = "B"
}

print(#array) --> 2

for index, value in pairs(array) do
  print(index, value)
end

--[[
2 B 
1 A

Instead of

1 A
2 B
]]--

Author: Pog Chonk
Category: Scripting
Date: 20 February 2021

< Back to overview
< View all authors
< View all categories