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

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

我需要比较两个表格并返回它们之间的差异,就好像我在对它们进行减法一样。

TableOne = {thing = "bob", 89 = 1, 654654 = {"hi"}} --大约有 3k 个项目
TableTwo = {thing = "bob", 654654 = "hi"} --相同,大约有 3k 个项目

function table.GetDifference(t1, t2)

   local diff = {}

      for k, dat in pairs(t1) do --循环遍历最大的表格

         if(!table.HasValue(t2, t1[k])) then --检查 t2 中是否没有这个值

            table.insert(diff, t1[k]) --将值插入差异表格中
            print(t1[k])

         end

      end

   return diff

end

if table.Count(t1) != table.Count(t2) then --检查数量是否相等,在我的用途中,我不需要检查它们是否完全相同。

   PrintTable(table.GetDifference(t1, t2)) --打印出差异。

end

我的问题是,仅有一个不同之处,这个函数就会返回超过 200 个项目。我添加的唯一项是一个字符串。我尝试了许多其他类似这样的函数,但它们通常会由于表格长度而导致堆栈溢出错误。

点赞
用户585411
用户585411

你的问题在这行代码上:

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-12 00:38:23