在 Haskell 中对列表进行排序

Jam*_*mes 4 haskell list

[[1,3,4],[1,5,6,7],[2,8,0]]假设我有一个像or这样的列表列表["QQQ", "RRRR", "TTTTT"],是否有一个函数可以按内部列表中的元素数量对它们进行排序,即在列表中,Int4 个元素列表位于前面,而在Strings 列表中,Ts 位于前面到前面然后是Rs?

fja*_*rri 6

将sortBy与自定义谓词一起使用:

Prelude> import Data.List
Prelude Data.List> let l = [[1,3,4],[1,5,6,7],[2,8,0]]
Prelude Data.List> sortBy (\e1 e2 -> compare (length e2) (length e1))  l
[[1,5,6,7],[1,3,4],[2,8,0]]
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@JJJ 提供了一个更漂亮的变体

Prelude Data.List> import Data.Ord
Prelude Data.List Data.Ord> sortBy (flip $ comparing length) l
[[1,5,6,7],[1,3,4],[2,8,0]]
Run Code Online (Sandbox Code Playgroud)

  • `\e1 e2 -> 比较 (长度 e2) (长度 e1)` == `翻转 $ 比较长度`。 (2认同)