爲什麼Haskell的sort
的Data.List
忽略第三位?Haskell排序功能
Prelude>sort ["1","200","234","30"]
["1","200","234","30"]
編輯:對不起,我沒有意識到那是字符串。我的錯。
爲什麼Haskell的sort
的Data.List
忽略第三位?Haskell排序功能
Prelude>sort ["1","200","234","30"]
["1","200","234","30"]
編輯:對不起,我沒有意識到那是字符串。我的錯。
沒有,但它確實各種各樣的字符串作爲它應該做的事:字典順序
的關係"200" < "30"
適用於作爲"Hello" < "World"
做同樣的道理。
所以,如果你希望Haskell按數值排序,你必須排序實際的數字。
import Data.List
import Data.Function
sortNumeric = sortBy (compare `on` (read :: String -> Int))
sortNumeric ["1", "200", "234", "30"]
但是:爲什麼您的列表中充滿「數字」包含字符串?考慮使用適當的[Int]
。
您正在使用字符串,而不是數字。 您應該考慮將字符串解析爲數字。 嘗試刪除「」字符,看看它是否開始工作。
我不是Haskell專家,但它似乎是在對字符串進行詞法排序。你可以改爲整數嗎? (也許類似於[1, 200, 234, 30]
?)
您正在排序字符串,而不是數字 - 它按「按字母順序排列」,因此按第一個字符排序,然後按第二個字符排序,依此類推。這同樣也是因爲您經常會看到名稱爲「文件1」,「文件2」,...「文件10」的文件,並且這樣排序的「不正確」。