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

Нет описания правки
Нет описания правки
Строка 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 function isArray(t)
         for _, v in pairs(t) do
        local count = 0
             if type(v) == "nil" then return false end
         for k in pairs(t) do
             if type(k) ~= "number" then return false end
            count = count + 1
         end
         end
         return true
         return count == #t
     end
     end


     if isArray(t1) and isArray(t2) then
     if isArray(t1) and isArray(t2) then
         if #t1 ~= #t2 then return false end
         if #t1 ~= #t2 then return false end
         local matched = {}
         for i = 1, #t1 do
        for _, v1 in pairs(t1) do
             if not deepEqual(t1[i], t2[i]) then
             local found = false
                 return false
            for _, v2 in pairs(t2) do
                if not matched[v2] and deepEqual(v1, v2) then
                    matched[v2] = true
                    found = true
                    break
                 end
             end
             end
            if not found then return false end
         end
         end
         return true
         return true
     end
     end


    -- Если это таблицы, проверяем их содержимое
     for k, v in pairs(t1) do
     for k, v in pairs(t1) do
         if not deepEqual(v, t2[k]) then
         if t2[k] == nil or not deepEqual(v, t2[k]) then
             return false
             return false
         end
         end
Строка 46: Строка 39:


     for k, v in pairs(t2) do
     for k, v in pairs(t2) do
         if not deepEqual(v, t1[k]) then
         if t1[k] == nil or not deepEqual(v, t1[k]) then
             return false
             return false
         end
         end