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

标签 list function haskell tuples

<分区>

我需要从这里出发:

[(2,"a"), (1,"a"), (1,"b"), (1,"c"), (2,"dd")]

到这里:

[([1, 2], "a"), ([1], "b"), ([1], "c"), ([2], "dd")]

到目前为止我有

combineInts listTuple = someFunc (map (\(num, str) -> ([num], str)) listTuple)

其中“someFunc”是我仍然需要弄清楚并实现的部分。我相信它应该利用 foldr、map 和/或 intercalate 来实现我的目标。有什么想法吗?

最佳答案

应该这样做:

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

关于list - Haskell:在元组列表中组合整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769930/

相关文章:

python pandas - 根据包含字符串列表的 B 列更改 A 列中的值

python - 根据他们的位置创建一个新列表

c++ - 带有指向参数的指针的基本函数重载给出错误

javascript - function() 存在但原型(prototype) function() 不存在。为什么?

javascript - 如何从另一个函数调用函数?

haskell - 如何从本地 Happstack 服务器提供 MathJax 服务?

Linux:列出文件名,如果上次修改在日期间隔之间

haskell - 约束的类型别名不与上下文共享相同的变量绑定(bind)行为

Haskell:类型类和实例(不在范围内:数据构造函数..)

python - 使用列表理解修改列表中的列表