Haskell:在元组列表中组合整数

san*_*nic 2 haskell tuples function list

我需要从这里开始:

[(2,"a"), (1,"a"), (1,"b"), (1,"c"), (2,"dd")]
Run Code Online (Sandbox Code Playgroud)

到这里:

[([1, 2], "a"), ([1], "b"), ([1], "c"), ([2], "dd")]
Run Code Online (Sandbox Code Playgroud)

到目前为止我有

combineInts listTuple = someFunc (map (\(num, str) -> ([num], str)) listTuple)
Run Code Online (Sandbox Code Playgroud)

其中"someFunc"是我仍需要弄清楚并实现的位.我相信它应该利用foldr,map和/或intercalate来实现我的目标.有任何想法吗?

Sam*_*den 5

这应该做:

import Data.Function (on)
import Data.List (groupBy, sort, sortBy)

out = map f . groupBy ((==) `on` snd) . sortBy (compare `on` snd) $ input
  where input = [(2,"a"),(1,"a"),(1,"b"),(1,"c"),(2,"dd")]
        f xs@(x:_) = (sort $ map fst xs, snd x)

main = print out
Run Code Online (Sandbox Code Playgroud)