2014-04-14 12 views
5

Ich versuche, Tabelle von Tabelle in Lua zu subtrahieren, so wird die Rückgabetabelle die Subtraktion von t1 von t2 sein.Tabelle von Tabelle in Lua subtrahieren

Dies scheint zu funktionieren, aber gibt es einen effizienteren Weg?

function array_sub(t1, t2) 

-- Substract Arrays from Array 
-- Usage: nretable = array_sub(T1, T2) -- removes T1 from T2 

table.sort(t1) 

for i = 1, #t2 do 
    if (t2[i] ~= nil) then 
     for j = 1, #t1 do 
     if (t2[i] == t1 [j]) then 
     table.remove (t2, i) 
     end 
     end 
    end 
end 
    return t2 
end 


local remove ={1,2,3} 
local full = {}; for i = 1, 10 do full[i] = i end 

local test ={} 

local test = array_sub(remove, full) 

for i = 1, #test do 
    print (test[i]) 
end 

Antwort

4

Ja, es ist: eine Lookup-Tabelle Nehmen Sie alle Werte der Tabelle t1 enthält, und dann am Ende Start Tabelle t2 durchlaufen.

function array_sub(t1, t2) 
    local t = {} 
    for i = 1, #t1 do 
    t[t1[i]] = true; 
    end 
    for i = #t2, 1, -1 do 
    if t[t2[i]] then 
     table.remove(t2, i); 
    end 
    end 
end 

O(#t1) Platz für einen Speedup O(#t1*#t2)-O(#t1+#t2) gehandelt.

-3

Sie subtrahieren einfach die Tabelle mit Minuszeichen.

Ex.

local t2 = {'a', 'b', 'c', 'd', 'e'} 
local t1 = {'b', 'e', 'a'} 

t2 = t2 - t1 

-- t2 new value is {'c', 'd', 'd'} 
+1

Im nativen Lua sind arrithmetische Operationen für Standardtabellenwerte nicht implementiert! Der von Ihnen angegebene Code verursacht einen Fehler ... – Piglet