GLua-获得两个表之间的区别

时间:2018-12-11 17:55:16

标签: algorithm sorting lua lua-table garrys-mod

免责声明:这是Glua(Garry的Mod使用的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多个项目。我添加的唯一项目是一个字符串。我尝试了许多其他类似这样的功能,但是由于表的长度,它们通常会导致堆栈溢出错误。

1 个答案:

答案 0 :(得分:1)

您的问题在于此行

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也没有,因此不应将其视为差异。