Haskell-从列表中对重复的元组进行分组,并通过snd使它们唯一

时间:2018-12-26 17:29:08

标签: list haskell duplicates tuples grouping

我有一个元组列表

[(1, "aa"), (1, "bb"), (2, "aa"), (3, "cc"), (4, "cc"), (1, "aa")]

我想将其转换为此

[(1, "aa"), (2, "aa+1"), (1, "aa+2"), (1, "bb"), (3, "cc"), (4, "cc+1")]

顺序无关紧要。

每个元素在snd中是唯一的

我当时在想一些可行的方法

identifier :: [String]
identifier = map (\ x -> (\ a b -> b ++ show a) x "+") [1, 2 .. ]


unUniqueNumbered :: [(String, String)] -> [(String, String)]
unUniqueNumbered = zipWith (\b a -> (fst a, snd a ++ b)) identifier


uniquifySND :: [(String, String)] -> [(String, String)]
uniquifySND theList = concat $ groupBy ((==) `on` snd) theList

问题在于,groupBy仅将相邻的重复元素分组。

我需要更改什么?

1 个答案:

答案 0 :(得分:1)

我能够解决问题。

sortOn做到了。

sortOn snd theList

现在有重复的元素相邻,因此group可以像往常一样工作

感谢@ assembly.js的提示!