1

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

4

1 回答 1

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这样做,这不应被视为差异。

于 2018-12-12T00:38:23.290 回答