Why does Haskell's sort
of Data.List
ignore the third digit?
Prelude>sort ["1","200","234","30"]
["1","200","234","30"]
EDIT: Sorry, I did not realize those were strings. My fault.
No, but it does sorts strings as it's supposed to do: Lexicographically
The relation "200" < "30"
holds for the same reason as "Hello" < "World"
does.
So if you want Haskell to sort by the numeric value, you'll have to sort actual numbers.
import Data.List
import Data.Function
sortNumeric = sortBy (compare `on` (read :: String -> Int))
sortNumeric ["1", "200", "234", "30"]
But: Why does your list full of "numbers" contain strings? Consider using a proper [Int]
instead.
I'm no Haskell expert, but it would seem to be doing a lexical sort on strings. Can you make them integers instead? (Maybe something like [1, 200, 234, 30]
?)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With