I am fairly new to F# and came by the Seq.sortBy function however it is sorting my list in ascending order. How do I get it to sort in descending order using the Seq.sort?
For instance an example code would be...
let DisplayList =
seq{0..10}
|> Seq.sortBy(fun x -> x)
|> Seq.iter(fun x -> Console.WriteLine(x.ToString()))
gives me an output of 1 2 3 4 5 6 7 8 9 10, when I really want it to do it from 10 to 1.
解决方案
Looking at the other answers, beware unary minus and MININT:
let a = [| 1; -1; System.Int32.MinValue; 0; System.Int32.MaxValue; 1 |]
printfn "%A" (a |> Array.sortBy (fun x -> x))
// [|-2147483648; -1; 0; 1; 1; 2147483647|]
printfn "%A" (a |> Array.sortBy (fun x -> -x)) // uh-oh!
// [|-2147483648; 2147483647; 1; 1; 0; -1|]
I think you actually want negative-x-minus-one:
printfn "%A" (a |> Array.sortBy (fun x -> -x - 1))
// [|2147483647; 1; 1; 0; -1; -2147483648|]
for a wraparound integer type that spans -2^N..2^N-1.