【发布时间】:2019-12-05 11:49:38
【问题描述】:
我正在尝试从两个表中获取不相交的元素。我的表目前定义为:
local t1={elem5=true, elem2=true, ...}
local t2={elem2=true, elem5=true, ...}
但是,将结构更改为:
local t1={elem5, elem2, ...}
local t2={elem2, elem5, ...}
我怎样才能有效地从两个表中获取不相交的元素?我还需要知道元素最初属于哪个表。
首先想到的是遍历两个表:
local fromt1={}
for k, v in pairs(t1) do
if not t2[k] then
fromt1[#fromt1+1]=v
end
end
local fromt2={}
for k, v in pairs(t2) do
if not t1[k] then
fromt2[#fromt2+1]=v
end
end
但是这是两个循环,所以我又看了一些,发现了一个在一个循环中迭代两个表的函数(link):
function pairs2(t, ...)
local i, a, k, v = 1, {...}
return
function()
repeat
k, v = next(t, k)
if k == nil then
i, t = i + 1, a[i]
end
until k ~= nil or not t
return k, v
end
end
local fromt1, fromt2={}, {}
for k, v in pairs2(t1, t2) do
if not t2[k] then
fromt1[#fromt1+1]=v
end
if not t1[k] then
fromt2[#fromt2+1]=v
end
end
有任何更有效/更简洁的方法可以从 Lua 中的两个表中获取不相交的元素吗?
【问题讨论】: