local a = {1, 2, 3}
local b = {1, 2, 3, 4, 5, 6}
-- I need b - a = {4, 5, 6}
我想从数组b
中删除同样存在于数组a
中的所有元素。寻找最快的解决方案。
答案 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)
你可以在这里使用堆栈。当只比较两个不同的索引推入堆栈时。叠加。