Только в случае, если вы хотите, чтобы пересекать большие векторы (массивы/наборы), вот попытка на неизмеренной преждевременной оптимизации
local v1 = {1,2,4,8,16}
local v2 = {2,3,4,5}
local function intersect(t1,t2)
local function make_lookup(t)
local res={}
for _,v in ipairs(t) do
res[v]=true
end
return res
end
local smaller,larger
if (#t1>#t2) then
larger=t1
smaller=t2
else
larger=t2
smaller=t1
end
local lookup=make_lookup(smaller)
local res={}
for _,v in ipairs(larger) do
if lookup[v] then
res[#res+1]=v
end
end
return res
end
local v1v2_intersected=intersect(v1,v2)
Внутренняя таблица поиска выполнена из таблицы меньших массивов двух. В «производстве» вы, возможно, также захотите проверить, имеете ли вы правильные входные значения
Вы не говорите, что если элемент 'l' повторяется в' n' раз в 'v1' и' m 'times в' v2', вы хотите 'l' повторить' min (n, m) 'в' v3'. Полученные ответы уже делают разные предположения о желаемом результате и даже если повторение разрешено. –