2009-05-05 15 views
21

Gibt es eine Funktion in F # ähnlich wie LINQ fließend Syntax durch mehrere Ausdrücke Sortierung:SortiertNach ThenBy in F #

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

ich so etwas wie Liebe würde:

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

Thx

Antwort

40

Verwenden Sie ein Tupel als Sortierschlüssel:

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

Recht, sortiert Tupel in lexikographischer Reihenfolge, so dass mehrere Schlüssel, um von links nach rechts in einem Tupel setzen ist genau das, was gewünscht ist, . – Brian

+0

@ tim-robinson Weißt du, wie man diese Art von Sortierung mit alphanum/natürliche Sortierung für jedes Element im Schlüssel machen würde? – Erick

+0

@Erick Ich würde IComparable von Hand implementieren, und entweder Seq.sortBy (Wrapping der Sortierschlüssel in meiner benutzerdefinierten IComparable-Implementierung), oder rufen Sie System.Linq.Enumerable.OrderBy (und übergeben Sie meine IComparable als Parameter). –

Verwandte Themen