GLua - 获取两个表之间的差异

GLua - Getting the difference between two tables

免责声明:这是 Glua(Lua 被 Garry 的 Mod 使用)

我只需要比较它们之间的 table 和 return 的区别,就好像我在对它们进行底层处理一样。

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

我的问题是,两个 table 之间只有一个区别,这个 return 我有 200 多件商品。我添加的唯一项目是一个字符串。我尝试了许多其他类似的函数,但由于 table 的长度,它们通常会导致堆栈溢出错误。

你的问题出在这一行

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