【问题标题】:Sort a list of tuples by 2nd tuple element [duplicate]按第二个元组元素对元组列表进行排序[重复]
【发布时间】:2012-03-13 07:50:07
【问题描述】:

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

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

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

我想根据作为元组中的第二个元素的整数列表的长度按升序对列表进行排序,但是我的 haskell 充其量是很差的,我想不出办法来做到这一点。

【问题讨论】:

    标签: list sorting haskell functional-programming tuples


    【解决方案1】:

    大部分排序问题都可以通过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])]
    

    【讨论】:

    • 非常感谢您非常有帮助
    • 您不能在 inside 代码跨度中使用降价语法,但您可以将整个代码跨度包装在一个链接中。
    【解决方案2】:
    sortBy (comparing $ length . snd) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
    

    【讨论】:

    • 供参考(其他读者),sortBy不在Prelude,而是Data.List,而comparing在Data.Ord
    猜你喜欢
    • 2012-03-08
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2011-05-21
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多