簡體   English   中英

排序haskell中的列表列表

[英]sorting lists of lists in haskell

我完全不知道如何編寫一個函數,給定一個集合列表返回按大小拆分為子列表的集合(以及按照它們包含的集合大小排序的子列表)。

樣本輸入

*Main> allSets
[[1,2],[8],[1,4,7,8],[5],[1,4],[1],[2,3],[1,2,5,8],[3,4,6,7],[1,2,3,4],[4],[5,6,7,8],[3,4],[3],[2,3,5,6],[7],[6],[2]]

樣本輸出

*Main> collectByLength allSets
[[[2],[6],[7],[3],[4],[1],[5],[8]],[[3,4],[2,3],[1,4],[1,2]],[[2,3,5,6],[5,6,7,8],[1,2,3,4],[3,4,6,7],[1,2,5,8],[1,4,7,8]]]

基本上,它應該將所有相同大小的集合分組到它們自己的集合中,然后它將下一個最大大小的集合分組。

你正在使用“sets”這個詞,但是你的代碼實際上使用了列表......所以,這里是一個基於列表的解決方案(如果你想切換到實際的集合,很容易適應):

import Data.List (sortBy)
import Data.Function (on)

groupBy ((==) `on` length) $ sortBy (compare `on` length) [[0],[1,2],[3]]
-- => [[[0],[3]],[[1,2]]]

導入Data.Function,Data.Ord和List后,您可以這樣寫:

sortBy (comparing length) $ groupBy ((==) `on` length) $ sortBy (comparing length) theList

暫無
暫無

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

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