2012-02-22 153 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

相关问题