Haskell - 按字母顺序对元组内的字符串进行排序

时间:2017-11-29 11:53:50

标签: sorting haskell tuples

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

实质上,有没有办法改变

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

进入列表

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

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

import Data.List

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

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

希望这有帮助。