Scala ha una funzione groupBy
in elenchi che accetta una funzione per l'estrazione di chiavi da voci di elenco e restituisce un altro elenco in cui gli elementi sono tuple costituite dalla chiave e l'elenco di elementi che producono quella chiave. In altre parole, qualcosa di simile:Haskell equivale al gruppo di ScalaDi
List(1,2,3,4,5,6,7,8,9).groupBy(_ % 2)
// List((0, List(2,4,6,8)), (1, List(1,3,5,7,9)))
(In realtà, sembra che nelle attuali versioni fornisce un Map
, invece, ma non è importante). C# ha una versione ancora più utile che ti permette di mappare i valori allo stesso tempo (molto utile se, per esempio, la tua funzione chiave sta semplicemente estraendo parte di una tupla).
Haskell ha un groupBy
, ma è un po 'diverso - raggruppa le corse di cose secondo alcune funzioni di confronto.
Prima di andare a scriverlo, c'è un equivalente di Scala groupBy
in Haskell? Hoogle non ha nulla per quello che mi aspetterei che la firma assomigli (sotto), ma forse ho appena sbagliato.
Eq b => (a -> b) -> [a] -> [(b,[a])]
Ho apportato una leggera modifica a questo per dare l'opzione C# di applicare una funzione sui valori allo stesso tempo: 'myGroupBy fg xs = map (f. testa &&& g). groupBy ((==) \ 'su \' f). sortBy (confronta \ 'on \' f) $ xs' – Impredicative
@Impredicative: Sembra davvero molto utile! –
@Impredicative: 'myCSharpGroupby f g xs = map (seconda g) $ myGroupBy f xs' funzionerebbe anche – cheecheeo