【问题标题】:Haskell - Sort strings inside a tuple in alphabetical orderHaskell - 按字母顺序对元组内的字符串进行排序
【发布时间】:2017-11-29 11:53:50
【问题描述】:

我有一个包含要排序的元组的列表,以便它们包含的 按字母顺序显示。我玩弄了 Data.List 排序,但只设法对列表进行排序,而不是对元组的值进行排序。

本质上,有什么办法可以翻一个列表

[("foo","bar"),("stack","overflow"),("help","please")]

进入列表

[("bar","foo"),("overflow","stack"),("help","please")]

【问题讨论】:

    标签: sorting haskell tuples


    【解决方案1】:

    一个元组只能是有序的或逆序的,因为它总是只有两个元素,所以这些是唯一的排列。因此,您只需要检查是哪种情况,如有必要,将元组翻转一次。

    sortTuple :: Ord a => (a,a) -> (a,a)
    sortTuple (x,y)
      | x>y        = ...
      | otherwise  = ...
    

    这个问题与列表无关,因为您只是将操作独立应用于每个元素

    sortTuplesInList :: Ord a => [(a,a)] -> [(a,a)]
    sortTuplesInList = map sortTuple
    

    【讨论】:

    • 谢谢,map 关键字正是我要找的,我们的导师在我们的 Haskell 课程中还没有研究过。
    • map 不是关键字,而是函数。
    【解决方案2】:

    虽然元组的长度可以不同(我认为最多 64 个元素),但包装器列表必须是同质的(即所有元组元素都具有相同的长度)。这使得使用列表理解之类的东西变得容易:

    import Data.List
    
    let sortedPairs = [(x,y) | [x,y] <- tmp]
      where tmp = [sort [x,y] | (x,y) <- [("m","l"),("p","q"),("s","r")]]
    

    您可以调整元组(以及模式匹配中的变量)的大小以适合您的域。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多