2009-05-05 16 views
21

C'è qualche funzione in F # simile a LINQ sintassi fluente per l'ordinamento da molteplici espressioni:OrderBy ThenBy in F #

myList.OrderBy(fun x->x.Something).ThenBy(fun x->x.SomethingElse) 

Mi piacerebbe qualcosa di simile:

myList 
|> Seq.sort_by(fun x->x.Something) 
|> Seq.then_by(fun x->x.SomethingElse) 

Thx

risposta

40

Usare una tupla come chiave l'ordinamento:

myList |> Seq.sortBy (fun x -> x.Something, x.SomethingElse) 
+1

Destra, tuple ordinamento in ordine lessicografico, in modo da mettere più chiavi in ​​modo da sinistra a destra in una tupla si limita a ciò che si desidera . – Brian

+0

@ tim-robinson sai come si farebbe questo tipo di ordinamento con caratteri alfanumerici/naturali per ogni oggetto della chiave? – Erick

+0

@Erick Implementare IComparable a mano e chiamare Seq.sortBy (avvolgendo la chiave di ordinamento nella mia implementazione IComparable personalizzata) o chiamare System.Linq.Enumerable.OrderBy (e passare il mio IComparable come parametro). –

1

Potresti trovare alcuni degli algoritmi di ordinamento qui utili, dato che non conosco un'attesa in F # per fare l'ordinamento, oltre all'utilizzo della funzionalità .NET.

http://cs.hubfs.net/forums/thread/3876.aspx