GLua - Получение разницы между двумя таблицами - PullRequest
0 голосов
/ 11 декабря 2018

Отказ от ответственности: это Glua (Lua, используемый модом Гарри)

Мне просто нужно сравнить таблицы между ними и вернуть разницу, как если бы я их подставлял.

TableOne = {thing = "bob", 89 = 1, 654654 = {"hi"}} --Around 3k items like that
TableTwo = {thing = "bob", 654654 = "hi"} --Same, around 3k

function table.GetDifference(t1, t2)

   local diff = {}

      for k, dat in pairs(t1) do --Loop through the biggest table

         if(!table.HasValue(t2, t1[k])) then --Checking if t2 hasn't the value

            table.insert(diff, t1[k]) --Insert the value in the difference table
            print(t1[k]) 

         end

      end

   return diff

end

if table.Count(t1) != table.Count(t2) then --Check if amount is equal, in my use I don't need to check if they are exact.

   PrintTable(table.GetDifference(t1, t2)) --Print the difference.

end

Моя проблема в том, что при наличии только одного различия между двумя таблицами это возвращает мне более 200 предметов.Единственный предмет, который я добавил, был String.Я пробовал много других функций, подобных этой, но они обычно вызывают ошибку переполнения стека из-за длины таблицы.

1 Ответ

0 голосов
/ 12 декабря 2018

Ваша проблема с этой строкой

if(!table.HasValue(t2, t1[k])) then --Checking if t2 hasn't the value

Измените ее на:

if(!table.HasValue(t2, k) or t1[k] != t2[k]) then --Checking if t2[k] matches

В данный момент происходит то, что вы смотрите на запись типа thing = "bob"а затем вы посмотрите, есть ли у t2 ключ "bob".И это не так.Но ни один не сделал t1, так что это не должно рассматриваться как разница.

...