如何从数组B中删除数组A中的所有元素?

我想从数组 `b` 中删除所有在数组 `a` 中也存在的元素。寻找最快速的解决方案。
点赞
用户5403480
用户5403480

在这里你可以使用堆栈。当比较两个不同的索引时,将它们推入堆栈中。stack

2015-09-03 13:40:42
用户258523
用户258523

将较小的表格反转成哈希表,并在循环中进行比较。

function invtab(t)
    local tab = {}
    for _, v in ipairs(t) do
        tab[v]=true
    end
    return tab
end

local a = {1, 2, 3}
local b = {1, 2, 3, 4, 5, 6}

local ainv = invtab(a)

-- 获取新表格中未包含的元素。
local ntab = {}
for _, v in ipairs(b) do
    if not ainv[v] then
        ntab[#ntab + 1] = v
    end
end

-- 直接删除原表格中包含的元素。
for i = #b, 1, -1 do
    local v = b[i]
    if ainv[v] then
        table.remove(b, i)
    end
end
2015-09-03 13:57:00
用户3923852
用户3923852

这段代码将重复的键复制到数组 c 中

local a = {1, 2, 3}
local b = {1, 2, 3, 4, 5, 6}
local c = {}

for k, v in ipairs(b) do
    local foundkey = false
    for _k, _v in ipairs(a) do
        if _v == v then
            foundkey = true
        end
    end
    if foundkey then
        table.insert(c, v)
    end
end

或者

local a = {1, 2, 3}
local b = {1, 2, 3, 4, 5, 6}

for k, v in ipairs(b) do
    local key = 0
    for _k, _v in ipairs(a) do
        if _v == v then
            key = _k
        end
    end
    if key ~= 0 then
        table.remove(a, key)
    end
end

-- 输出 a = {7}

或者

local a = {1, 2, 3}
local b = {1, 2, 3, 4, 5, 6}
local c = {}

for k, v in ipairs(b) do
    local foundkey = 0
    for _k, _v in ipairs(a) do
        if _v == v then
            foundkey = _k
        end
    end
    if foundkey == 0 then
        table.insert(c, v)
    end
end
a = c

-- 输出 a = {4, 5, 6}
2015-09-03 14:05:43