2010-01-27 233 views
3

爲什麼Haskell的sortData.List忽略第三位?Haskell排序功能

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

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

編輯:對不起,我沒有意識到那是字符串。我的錯。

回答

24

沒有,但它確實各種各樣的字符串作爲它應該做的事:字典順序

的關係"200" < "30"適用於作爲"Hello" < "World"做同樣的道理。

所以,如果你希望Haskell按數值排序,你必須排序實際的數字。

import Data.List 
import Data.Function 

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

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

但是:爲什麼您的列表中充滿「數字」包含字符串?考慮使用適當的[Int]

2

您正在使用字符串,而不是數字。 您應該考慮將字符串解析爲數字。 嘗試刪除「」字符,看看它是否開始工作。

7

我不是Haskell專家,但它似乎是在對字符串進行詞法排序。你可以改爲整數嗎? (也許類似於[1, 200, 234, 30]?)

2

您正在排序字符串,而不是數字 - 它按「按字母順序排列」,因此按第一個字符排序,然後按第二個字符排序,依此類推。這同樣也是因爲您經常會看到名稱爲「文件1」,「文件2」,...「文件10」的文件,並且這樣排序的「不正確」。