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

我有一个元组列表

[(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 的提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多