按第二元组元素排序元组列表

时间:2012-02-22 22:20:00

标签: list sorting haskell functional-programming tuples

  

可能重复:
  Sort a list of tuples by their second elements

嘿,我有一个看起来像这样的元组列表

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

我想按照整数列表的长度按顺序对列表进行排序,整数列表是元组中的第二个元素,但是我的haskell充其量是穷人,我无法想办法做到这一点。

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分: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])]