【发布时间】:2012-08-07 03:22:05
【问题描述】:
我正在尝试编写具有以下签名的方法:
def buildSumMap(minInterval:Int, mappes:SortedMap[Int, Long]):SortedMap[Int, Long] = {...}
在方法中,我想通过对每个应用以下伪代码来返回一个新地图
(key:Int,value:Long)-对“映射”:
If(key + minInterval > nextKey) {
value += nextValue
}
else {
//Forget previous key(s) and return current key with sum of all previous values
return (key, value)
}
示例:如果我有源 Map ((10 -> 5000), (20 -> 5000), (25 -> 7000), (40 -> 13000)) 并将 minInterval 定义为 10,我希望得到的 Map:
((10 -> 5000), (25 -> 12000), (40 -> 13000))
我发现了很多分别转换键和过滤键和值的示例,但到目前为止还没有删除键的示例,同时保留值。
【问题讨论】:
-
如果你的最后一个键是 30 而不是 40 怎么办?
-
那么结果映射应该是
((10 -> 5000), (30 -> 25000)),因为我首先检查(当前键+间隔)是否在下一个键的范围内,然后再返回键值对。不过说实话:我的主要问题是以“scala-ish”的方式同时过滤/减少和求和地图。过滤逻辑本身在我的优先级列表中并不高。 -
据我了解,条件应该是
key + minInterval > nextKey(或nextKey - key < minInterval) - 间隔小的键合并为一个,键更大,对吧? -
你当然是对的。我真的更关心如何实现过滤而不是过滤器本身。我调整了代码。