【问题标题】:Sort tuples within list in Haskell在 Haskell 中对列表中的元组进行排序
【发布时间】:2014-11-26 00:22:01
【问题描述】:

因此,在互联网上搜索了很长一段时间以寻找一个不错的解决方案后,我终于走到了尽头。

我目前面临一些有关文本处理的 Haskell 问题,其中大部分都非常顺利。但是,我现在被困在对列表中的元组进行排序。

基本上,我有一个元组列表,所以类似于

list = [("hey","there"),("there","hey"),("bears","are")]

我现在的目标是在内部对元组进行排序,以便我收到

list = [("hey","there"),("hey","there"),("are","bears")]

然后我将运行group $ sort list 以便能够检索有多少对等对的计数。换句话说,("hey,"there")等价于("there","hey")

到目前为止,我尝试过的是使用地图功能。但是,您似乎无法使用 map 函数运行列表操作,但至少要尝试了解我的最终目标是什么,这是我到目前为止所取得的成就。

countup tuples =
    let final =
        sort sorted_internal where
            sorted_internal = map (\x->(sort x)) tuples
    in map (\x->(head x, length x)) final

【问题讨论】:

  • Cheerio 通常表示再见
  • 你基本上是在问如何对元组进行排序?您不能对它们进行一般排序,它们不是列表。你有没有考虑过不使用元组,或者写orderTuple :: (a,a) -> (a,a),如果它还没有,就把较小的放在第一位
  • 好吧,我将如何将它应用到我已经拥有的东西中?因为,是的,我的目标确实是以某种方式订购它们。但是,我想在元组中排序,而不是对元组本身进行排序。

标签: list sorting haskell


【解决方案1】:

sort 函数不能对元组的元素进行排序;它仅适用于列表

你有两个选择。一种是编写一个对(2元素)元组进行排序的函数:

sortTuple :: (Ord a) => (a,a) -> (a,a)
sortTuple (x,y) = (min x y, max x y)

map sortTuple tuples

另一种是使用列表而不是元组:

map sort [["hey","there"], ["hey","there"], ["are","bears"]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多