首页 > 解决方案 > 您将如何在包含元组列表的元组列表上使用 map?

问题描述

我在这里有一个列表,其结构如下:

list = [((1,1),[("A", 1), ("D", 4), ("E", 5)]), ((2,2),[("B", 2)]), ((3,3),[("C",3)])]

我想输出一个具有以下结构的列表(也就是将每个子列表的每个第二个值的值相加,例如 (1+4+5) = 10

[((1,1),10), ((2,2),2), ((3,3),3))]

我不确定如何通过使用 map 甚至 filter 来获得该结构,而我得到的最接近的是:

map snd (concat (map snd list)) 

产生[1,4,5,2,3]

我将如何实现这种结构?

标签: listhaskellfunctional-programmingtuples

解决方案


如果你不介意map你可以在这里使用列表理解:

list = [((1,1),[("A",1),("D",4),("E",5)]),((2,2),[("B",2)]),((3,3),[("C",3)])]
[(fst x, sum [snd y | y <- (snd x) ]) | x <- list]

返回

[((1,1),10),((2,2),2),((3,3),3)]

推荐阅读