如何获得两个Lua表的补充

时间:2013-03-18 14:28:34

标签: lua lua-table

在Lua v.5.2中,如何获得两个表的所有字符串的补码?

最理想的是,我希望有一个类似的函数:

    table.complement ( t1, t2 )

...其中return是一个表,它是表1和表2中键/值对的补充。也就是说,返回的表只包含两个表中都没有的键。

面对我的用例是NoteCase Pro大纲的脚本,该脚本将在执行将当前节点拆分为多个兄弟的操作之前获取唯一的兄弟节点ID(每个22个字符)的“之前”列表节点,获取兄弟节点ID的新“后”列表,将该列表减少到两个列表的补码,然后将新创建的节点降级为子节点或层次结构中的原始当前节点。

2 个答案:

答案 0 :(得分:4)

local function symm_diff(t1, t2)
  local t = {}
  for k, v in pairs(t1) do
    if t2[k] == nil then t[k] = v end
  end
  for k, v in pairs(t2) do
    if t1[k] == nil then t[k] = v end
  end
  return t
end

答案 1 :(得分:0)

没有任何理由你不能自己写这个......这样的事情?

function table.complement(t1, t2)
    local res = {}

    for _,v1 in pairs(t1) do
        local found = false
        for _,v2 in pairs(t2) do
            if (v1 == v2) then
                found = true
                break
            end
        end
        if not found then table.insert(res, v1) end
    end

    for _,v2 in pairs(t2) do
        local found = false
        for _,v1 in pairs(t1) do
            if (v2 == v1) then
                found = true
                break
            end
        end
        if not found then table.insert(res, v2) end
    end

    return res
end

local t1 = {"stuff", "more", "things"}
local t2 = {"stuff", "junk", "things"}

table.foreach(table.complement(t1, t2), print)

打印

1    more
2    junk