簡體   English   中英

Haskell 函數根據子列表的長度對整數列表進行排序

[英]Haskell function which sorts a list of integer lists according to the length of the sublists

我有一個清單:

[[1,2],[1,2,3],[2,3],[4],[1,2,5,4],[2,3,1]]

我想按照子列表的升序和長度對這個列表進行排序

像這樣:

[[4],[1,2],[2,3],[1,2,3],[2,3,1],[1,2,5,4]]

我找到了一個解決方案,但這不是我想要的

我找到了這個功能:

import Data.List

doubleSort :: (Ord a, Num a) => [[a]] -> [[a]]
doubleSort = sortOn sum . map sort

但這以我不想要的方式對列表進行排序:

[[1,2],[4],[2,3],[1,2,3],[1,2,3],[1,2,4,5]]

sort{[By,On]}是穩定的排序,因此您可以簡單地按次要標准排序,然后按主要標准排序。

> :m +Data.List
> sortOn length $ sort [[1,2],[1,2,3],[2,3],[4],[1,2,5,4],[2,3,1]]
[[4],[1,2],[2,3],[1,2,3],[2,3,1],[1,2,5,4]]

如果它已經按字典順序排序,那么僅sortOn length就可以了。

有一個sort

> sortOn (length &&& sum)

&&&來自 Control.Arrow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM