说如果我有一个列表,例如[[1,3,4],[1,5,6,7],[2,8,0]]
或["QQQ", "RRRR", "TTTTT"]
,是否有一个函数会按照内部列表中的元素数排序,即在Int
列表中的4元素列表走到前面,在String
的列表中,T
s到达前面,然后是R
s?在Haskell中订购清单列表
2
A
回答
3
使用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]]
编辑:感谢@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]]
1
sortBy
从和Data.List模块从comparing
将Data.Ord帮助您。
foo = sortBy (comparing (negate . length))
bar = foo ["QQQ", "RRRR", "TTTTT"]
0
我想添加另一个解决方案,记忆给定列表的长度。否则,每次比较都会重新计算长度,这意味着大型列表的开销很大。
import Control.Arrow ((&&&))
import Data.List (sort, sortBy)
import Data.Ord (comparing)
sortByLen :: [[a]] -> [[a]]
sortByLen = map snd . sortBy (comparing fst) . map ((negate . length) &&& id)
如果你也想在相同长度的名单得到字典顺序排序,您可以使用稍微简单
sortByLen' :: (Ord a) => [[a]] -> [[a]]
sortByLen' = map snd . sort . map ((negate . length) &&& id)
相关问题
- 1. Haskell生成列表清单
- 2. 如何订购此清单?
- 3. 如何订购清单
- 4. 订购清单<T>
- 5. 斯卡拉 - 订购清单
- 6. 手动订购清单C#?
- 7. 在列表中订购
- 8. Haskell中的列表清单工作
- 9. 在订单清单的列表项中嵌套列表项?
- 10. Cassandra中的型号和订购清单
- 11. Haskell。列表清单的问题
- 12. 订购C#中的列表
- 13. 在django订购列表
- 14. 如何通过表单发送简单的订购清单?
- 15. 使用指针订购清单
- 16. 允许用户订购选择清单?
- 17. 标记订购的描述清单
- 18. 如何订购清单<string>?
- 19. 以任意方式订购清单
- 20. 在一个下拉列表中订购
- 21. 如何在Python中订购此列表?
- 22. 在列表中订购字典
- 23. 在视图中订购has_many列表
- 24. Haskell使用代理订单对无法订购的订单进行排序
- 25. 在Haskell中合并类似的列表清单
- 26. 列表列表清单列表清单
- 27. 表单元素订购
- 28. Django表单订购是歪
- 29. 列表<T>订购
- 30. 订购地址列表
所以,[sortBy(http://www.haskell.org/ghc/文档/ 7.6-最新/ HTML /库/基4.6.0.1 /数据List.html#五:sortBy)? –