嘿,我有一个看起来像这样的元组列表
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我想按照整数列表的长度按顺序对列表进行排序,整数列表是元组中的第二个元素,但是我的haskell充其量是穷人,我无法想办法做到这一点。
答案 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])]