1

在 Lua v. 5.2 中,我怎样才能得到两个表的键都是字符串的补码?

理想情况下,我希望有一个类似的功能:

    table.complement ( t1, t2 )

...其中返回的是一个表,它是表 1 和表 2 中键/值对的补集。也就是说,返回的表仅包含两个表中都不包含的键。

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

4

2 回答 2

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
于 2013-03-18T17:52:19.630 回答
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
于 2013-03-18T18:04:12.487 回答