intersect
intersect
<lst>:intersect(lst1, lst2, ..., lstn, [foo(item, pos)])
Esegue l'intersezione di tutte le liste. Mantiene solo gli elementi presenti in tutte le liste. Attenzione perché utilizza la comparazione del lua e quindi non funzione per le tabelle che vengono passate per riferimento.
Nel secondo caso è possibile passare la funzione che genera una key univoca per il confronto degli elementi.
Esempio 222. Esempio intersect
local a = {"a","a","b","e"}
a = XTable(a):intersect({"a", "b", "e"}, {"a", "e"}):astable())
--> {"a", "e"}
local orders = {
{id=2, product="Computer", price=1000, year=2010},
{id=2, product="Book", price=50, year=2012},
{id=2, product="TV", price=800, year=2011},
}
local orders1 = {
{id=4, product="Computer", price=1000, year=2010},
{id=4, product="Book", price=50, year=2012},
}
local x = (XTable(orders)
:intersect(orders1,
function(item, pos) return format("%s-%d-%d", item.product, item.price, item.year) end)
:astable()
--> {{id=4, product="Computer", price=1000, year=2010},
{id=4, product="Book", price=50, year=2012}}