免责声明:这是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多个项目。我添加的唯一项目是一个字符串。我尝试了许多其他类似这样的功能,但是由于表的长度,它们通常会导致堆栈溢出错误。
答案 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
也没有,因此不应将其视为差异。