2009-05-05 19 views
21

¿Hay alguna función en F # similar a la sintaxis fluida LINQ para la clasificación de múltiples expresiones:OrdenarPor ThenBy en Fa #

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

me encantaría algo como:

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

Thx

Respuesta

40

Utilice una tupla como su clave de ordenación:

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

derecho, tuplas especie en orden lexicográfico, por lo que poner varias claves con el fin de izquierda a derecha en una tupla se limita a lo que se desea . – Brian

+0

@ tim-robinson ¿sabes cómo se podría hacer este tipo de ordenamiento con tipo alfanumérico/natural para cada elemento de la clave? – Erick

+0

@Erick Implementaría IComparable a mano, y llamaría a Seq.sortBy (envolviendo la clave de clasificación en mi implementación IComparable personalizada), o llamaría a System.Linq.Enumerable.OrderBy (y pasaría mi IComparable como parámetro). –