可能重复:
Sort a list of tuples by their second elements排序第2元组元素的元组的列表
嘿,我有一个元组列表,看起来像这样
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我希望根据元组中第二个元素的整数列表的长度以递增顺序对列表进行排序,但m y haskell最好是穷人,我无法想出办法做到这一点。
可能重复:
Sort a list of tuples by their second elements排序第2元组元素的元组的列表
嘿,我有一个元组列表,看起来像这样
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我希望根据元组中第二个元素的整数列表的长度以递增顺序对列表进行排序,但m y haskell最好是穷人,我无法想出办法做到这一点。
大多数排序问题可以用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])]
sortBy (comparing $ length . snd) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
作为参考(对于其他读者),'sortBy'不在Prelude中,而是Data.List,而'comparator'在Data.Ord中 – 2014-12-10 20:00:15
辉煌非常感谢你非常有帮助 – user1226239 2012-02-22 22:37:25
你不能有降价语法* *内码的跨度,但你可以在一个链接包裹整个码跨度。 – 2012-02-22 23:30:54