Lua 表差异键函数

如何检查一个表(作为数组)是否包含另一个表的所有键? 类似于 PHP 中的 array_diff_keyhttps://www.php.net/manual/en/function.array-diff-key.php

例如,此函数应返回 ["firstLevel"]["e"],因为该元素不存在于 tblTwo 中:

tblOne = {
    ["firstLevel"] = {
        ["a"] = "something",
        ["b"] = "something",
        ["c"] = "something",
        ["subLevel"] = {
            ["d"] = "something",
            ["e"] = "something",
        }
    }

tblTwo = {
    ["firstLevel"] = {
        ["a"] = "something",
        ["b"] = "something",
        ["c"] = "something",
        ["subLevel"] = {
            ["d"] = "something",
        }
    }
点赞
用户107090
用户107090

尝试下面的代码:

function diff(a,b,s)
    for k,v in pairs(a) do
        if b[k]==nil then return s.."."..k end
        if type(v)=="table" then
            local w=diff(v,b[k],k)
            if w~=nil then return s.."."..w end
        end
    end
end

print(diff(tblOne,tblTwo,"TOP"))
2019-10-04 11:44:44