在Haskell中对列表中的元组进行排序

Phr*_*gyy 0 sorting haskell list

因此,在互联网上搜索了一段时间以获得一个很好的解决方案后,我已经到了路的尽头.

我目前面临着一些关于文本处理的Haskell问题,而且大部分问题一直都很顺利.但是,我现在坚持在列表中排序元组.

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

list = [("hey","there"),("there","hey"),("bears","are")]
Run Code Online (Sandbox Code Playgroud)

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

list = [("hey","there"),("hey","there"),("are","bears")]
Run Code Online (Sandbox Code Playgroud)

然后,我将运行一个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
Run Code Online (Sandbox Code Playgroud)

Mat*_*hid 10

sort函数无法对元组的元素进行排序; 它只适用于列表.

你有两个选择.一种是编写一个用于排序(2元素)元组的函数:

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

map sortTuple tuples
Run Code Online (Sandbox Code Playgroud)

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

map sort [["hey","there"], ["hey","there"], ["are","bears"]]
Run Code Online (Sandbox Code Playgroud)