Haskell排序函数

时间:2010-01-27 15:37:18

标签: haskell functional-programming sorting

为什么Haskell的sort Data.List会忽略第三位数?

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

["1","200","234","30"]
编辑:对不起,我没有意识到那些是字符串。我的错。

4 个答案:

答案 0 :(得分:26)

不,但它确实对字符串进行了排序:按字典顺序

关系"200" < "30""Hello" < "World"的原因相同。

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

import Data.List
import Data.Function

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

sortNumeric ["1", "200", "234", "30"]

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

答案 1 :(得分:8)

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

答案 2 :(得分:2)

您使用的是字符串,而不是数字。 您应该考虑将字符串解析为数字。 尝试删除“”字符并查看它是否开始工作。

答案 3 :(得分:2)

你正在排序字符串,而不是数字 - 它按字母顺序排序它们,所以它按第一个字符排序,然后是下一个字符,依此类推。这就是为什么你经常会看到名为“文件1”,“文件2”,......“文件10”的文件,以及“错误”排序的文件。