为什么Haskell的sort
Data.List
会忽略第三位数?
Prelude>sort ["1","200","234","30"]
["1","200","234","30"]
编辑:对不起,我没有意识到那些是字符串。我的错。
答案 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”的文件,以及“错误”排序的文件。