【问题标题】:Haskell - Grouping duplicate tuples from a list and making them unique by snd [duplicate]Haskell - 将列表中的重复元组分组并通过 snd [重复] 使它们唯一
【发布时间】:2026-01-31 22:30:01
【问题描述】:

我有一个元组列表

[(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 只对相邻的重复元素进行分组。

我需要改变什么?

【问题讨论】:

  • 提示:使用sortBy
  • 已经为String 定义了Ord,可以满足您的需求。
  • @assembly.jc 感谢您的提示!

标签: list haskell duplicates tuples grouping


【解决方案1】:

我能够解决问题。

sortOn 成功了。

sortOn snd theList

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

感谢@assembly.js 的提示!

【讨论】:

    最近更新 更多