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

时间:2015-09-03 13:35:36

标签: lua

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

我想从数组b中删除同样存在于数组a中的所有元素。寻找最快的解决方案。

3 个答案:

答案 0 :(得分:4)

将较小的表反转为哈希并在循环中与其进行比较。

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)

-- To get a new table with just the missing elements.
local ntab = {}
for _, v in ipairs(b) do
    if not ainv[v] then
        ntab[#ntab + 1] = v
    end
end

-- To remove the elements in place.
for i = #b, 1, -1 do
    local v = b[i]
    if ainv[v] then
        table.remove(b, i)
    end
end

答案 1 :(得分:4)

此代码将重复的密钥复制到数组c

add_action('init', 'wpse_session_start', 1);
function wpse_session_start() {
   if(!session_id()) {
      update_user_meta( get_current_user_id(), '_last_login', time() );
      session_start();
    }
}

或者

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

-- Outputs a = {7}

答案 2 :(得分:0)

你可以在这里使用堆栈。当只比较两个不同的索引推入堆栈时。叠加。