Checking equality of arrays

Arrays and collections / Arrays

local function equal_arrays(a, b)
  if #a ~= #b then
    return false
  end
  for index = 1, #a do
    if a[index] ~= b[index] then
      return false
    end
  end
  return true
end

local function sorted_copy(t)
  local result = table.move(t, 1, #t, 1, {})
  table.sort(result)
  return result
end

local n1 = {1, 2, 3}
local n2 = {1, 2, 3}
local n3 = {3, 2, 1}

-- == compares references, not the items
local by_operator = n1 == n2
-- by_operator = false
local alias = n1
local same_table = alias == n1
-- same_table = true

local equal1 = equal_arrays(n1, n2)
-- equal1 = true
local equal2 = equal_arrays(n1, n3)
-- equal2 = false

-- Same items in any order: compare sorted copies
local equal3 =
  equal_arrays(sorted_copy(n1), sorted_copy(n3))
-- equal3 = true

print("by_operator = " .. tostring(by_operator))
print("same_table = " .. tostring(same_table))
print("equal1 = " .. tostring(equal1))
print("equal2 = " .. tostring(equal2))
print("equal3 = " .. tostring(equal3))