列表 - 组合对

L.R*_*R88 6 haskell list

我想创建一个列表的函数,例如

[('A',3), ('B',2), ('C',2), ('A',5), ('C',3), ('C',2)]
Run Code Online (Sandbox Code Playgroud)

然后在字母相同时将数字加在一起.所以上面的输入会产生

[('A',8), ('B',2), ('C',7)]. 
Run Code Online (Sandbox Code Playgroud)

有人可以请你告诉我如何解决这个问题,我想尽可能多地尝试自己做!

Ada*_*ner 7

您可以使用Data.Map's fromListWith来构造具有求和值的地图.它的类型是这样的:

fromListWith :: Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
Run Code Online (Sandbox Code Playgroud)

它需要一对对象列表(如您所述)作为第一个arg,如果它看到重复,它使用一些函数(第一个arg)来组合原始值和新值.从那里,您可以将此映射转换回对列表(也是Data.Map中的函数).

您可以使用纯列表执行此操作,但它可能不会那么有效,因为您将经常构建一个新列表(或部分列表).