【发布时间】:2017-01-05 05:54:50
【问题描述】:
所以我已经为此苦苦挣扎了几个小时。我有这个数组[[[4,2]],[[1,2],[1,1]]],我想把这个数组转换成[[[4,2]],[[1,3]]]。
所以一个类型为f :: [[[Integer]]] -> [[[Integer]]]的函数
问题
我有一个内部数组长度为 2 的二维数组:[[x,y] .. ]
如果内部数组的头元素重复,则内部数组是重复的:[[1,2],[1,1]]
如果有重复,我想取所有尾部的总和并创建一个新数组,头部作为重复值,重复的总和作为尾部值:[[1,2],[1,1]] 变为 [[[1,3]]
我有什么
dup [x,_] [y,_] = x == y
sample = [[[3,5],[2,3],[1,1]],
[[3,5],[2,3],[4,2],[1,2]],
[[3,5],[2,3],[4,2],[1,2]],
[[4,2],[1,2],[1,1]]]
ifDuplicateGroup = map (groupBy dup) sample
getSumOfDups n = map sum [concat $ map tail y | y <- n, (length y) > 1]
sumOfSample = map getSumOfDups sample
返回:
sumOfSample = [[],[],[],[3]]
期望的结果:
sumOfSample =
[[[3,5],[2,3],[1,1]],
[[3,5],[2,3],[4,2],[1,2]],
[[3,5],[2,3],[4,2],[1,2]],
[[4,2],[1,3]]]`
这是我能做到的最好的。请帮忙!我不知道如何得到想要的结果。
【问题讨论】:
-
澄清一个细节:如果您的内部列表之一类似于
[[1,2],[3,4]],会发生什么? -
二维数组没有任何变化。
[[1,2],[3,4]] -
类型应该少一个列表,所以
f :: [[[Integer]]] -> [[[Integer]]]。