2014-04-14 20 views
5

Próbuję odjąć tabelę od tabeli w Lua, więc tabela zwrotna będzie odejmowaniem t1 od t2.Odejmij tabelę od tabeli w Lua

Wydaje się, że to działa, ale czy jest to skuteczniejszy sposób?

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 

Odpowiedz

4

Tak, jest: Sprawdź tabelę przeglądową zawierającą wszystkie wartości z tabeli t1, a następnie przejść przez Tabeli T2 zaczynając od końca.

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 

Traded O(#t1) przestrzeń dla SpeedUp z O(#t1*#t2) do O(#t1+#t2).

-3

Po prostu odejmuj tabelę za pomocą znaku minus.

Przykł.

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

t2 = t2 - t1 

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

W rodzimych operacjach arytmetycznych Lua nie są realizowane dla standardowych wartości tabel! Podany kod spowoduje błąd ... – Piglet