groupby
groupby
<lst>:groupby(key)
<lst>:groupby(foo(item, pos))
Raggruppa gli elementi della lista. Ritorna un dizionario che ha come chiave i valori della key e come valore i risultati del raggruppamento. Nel secondo caso la funzione 'foo' deve ritornare la chiave di raggruppamento.
local orders = { {id=1, product="Computer", price=1000, year=2010},
{id=1, product="Book", price=50, year=2012},
{id=3, product="TV", price=800, year=2011},
{id=4, product="Manga", price=5, year=2010},
...
}
-- ritorna i tre anni più remunerativi
local a = XTable(orders)
:groupby("year") -- [*]
:select2(function(k, v) return {year=k, totalprice=XTable(v):sum('price')} end)
:orderbyascending('totalprice')
:take(3)
:astable()
--[*]
--> {['2010'] = {{id=1, product="Computer", price=1000, year=2010},
{id=4, product="Manga", price=5, year=2010}},
['2011'] = {{id=3, product="TV", price=800, year=2011}},
['2012'] = {{id=1, product="Book", price=50, year=2012}},
}