2012-02-22 9 views
2

可能性の重複:
Sort a list of tuples by their second elementsソート第二組の要素によるタプルのリスト

がちょっと私はこの

[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])] 

のように見えるタプルのリストを持っている私タプルの2番目の要素である整数リストの長さに応じて、リストを昇順にソートしたいが、m yのhaskellは最高に貧しいです、私はこれを行う方法を理解することはできません。

答えて

9

並べ替えの問題のほとんどはsortBy ::(a -> a -> Ordering) -> [a] -> [a]機能で解決できます。したがって、タプルの第2要素の長さに基づいて2つの要素を比較する順序付け関数を生成することです。 compare `on` (length . snd) :: (a1, [a]) -> (a1, [a]) -> Orderingが実際に必要なものです。華麗

eblo> sortBy (compare `on` (length . snd)) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])] 
[("y",[1,2]),("x",[1,2,3]),("z",[1,2,3,4])] 
+1

あなたは*コードスパン内の*マークダウン構文を持つことはできませんが、リンク全体のコードスパンをラップすることができますので、多くの非常に有用 – user1226239

+1

をお願いします。 –

10
sortBy (comparing $ length . snd) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])] 
+4

(他の読者の場合) 'sortBy'はPreludeではなくData.Listですが、' comparison'はData.Ordにあります –

関連する問題