Haskell排序函数

Hai*_*Hai 4 sorting haskell functional-programming

为什么Haskell的sortData.List忽视第三位?

Prelude>sort ["1","200","234","30"]

["1","200","234","30"]
Run Code Online (Sandbox Code Playgroud)

编辑:对不起,我没有意识到这是字符串.我的错.

Dar*_*rio 27

不,但它确实按照它应该做的排序字符串:按字典顺序排列

该关系"200" < "30"的原因与此相同"Hello" < "World".

因此,如果您希望Haskell按数值排序,则必须对实际数字进行排序.

import Data.List
import Data.Function

sortNumeric = sortBy (compare `on` (read :: String -> Int))

sortNumeric ["1", "200", "234", "30"]
Run Code Online (Sandbox Code Playgroud)

但是:为什么你的列表中包含"数字"包含字符串?考虑使用正确的[Int].


Ben*_*kes 8

我不是Haskell专家,但它似乎是对字符串进行词法排序.你可以改为整数吗?(也许是这样的[1, 200, 234, 30]?)