2012-02-22 197 views

回答

9

大多數排序問題可以用sortBy ::(a -> a -> Ordering) -> [a] -> [a]函數解決。因此,任務是生成排序函數,該函數根據元組的第二個元素的長度比較兩個元素。我們實際需要的是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 2012-02-22 22:37:25

+1

你不能有降價語法* *內碼的跨度,但你可以在一個鏈接包裹整個碼跨度。 – 2012-02-22 23:30:54

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

作爲參考(對於其他讀者),'sortBy'不在Prelude中,而是Data.List,而'comparator'在Data.Ord中 – 2014-12-10 20:00:15

相關問題