Модуль:Entity Sprite: различия между версиями

Нет описания правки
Метка: ручная отмена
мНет описания правки
Строка 13: Строка 13:
     if type(t1) ~= "table" or type(t2) ~= "table" then return false end
     if type(t1) ~= "table" or type(t2) ~= "table" then return false end


    -- Если это массивы, проверяем их содержимое без учета порядка
    local function isArray(t)
        local i = 0
        for _ in pairs(t) do
            i = i + 1
            if t[i] == nil then return false end
        end
        return true
    end
    if isArray(t1) and isArray(t2) then
        if #t1 ~= #t2 then return false end
        local matched = {}
        for _, v1 in ipairs(t1) do
            local found = false
            for j, v2 in ipairs(t2) do
                if not matched[j] and deepEqual(v1, v2) then
                    matched[j] = true
                    found = true
                    break
                end
            end
            if not found then return false end
        end
        return true
    end
    -- Если это таблицы, проверяем их содержимое
     for k, v in pairs(t1) do
     for k, v in pairs(t1) do
         if t2[k] == nil then
         if t2[k] == nil or not deepEqual(v, t2[k]) then
            return false
        end
        if not deepEqual(v, t2[k]) then
             return false
             return false
         end
         end
Строка 24: Строка 49:
     for k, v in pairs(t2) do
     for k, v in pairs(t2) do
         if t1[k] == nil then
         if t1[k] == nil then
            return false
             return false
        end
        if not deepEqual(v, t1[k]) then
             return false  
         end
         end
     end
     end