groupby

LUA

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.

Esempio 220. Esempio groupby

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}},
   }