更新地图的功能方式

时间:2017-05-04 18:50:17

标签: scala

我想检查Map中是否存在键,如果存在,我想在值上增加1。如果不存在,我想在Map上添加一个值等于1的新项目。

'功能方式'去做吧?我用find和fold写了它,但它看起来有点奇怪。

val updatedScore = currentScores
  .find(s => s._1.equals(score))
  .fold(score -> 1)(s => s._1 -> (s._2 + 1))

val newScores = currentScores + updatedScore

任何人都有更好的解决方案吗?

4 个答案:

答案 0 :(得分:8)

你可以这样做:

val newScores = currentScores + (score -> (currentScores.getOrElse(score, 0) + 1))

答案 1 :(得分:1)

val ret: mutable.Map[Int, Int] = mutable.Map[Int, Int]().withDefaultValue(1)
val arg = 5
ret.update(arg, ret(5)+1)

答案 2 :(得分:0)

val updatedScore = score -> (currentScores(score)+ 1)
val newScores= currentScores - score + newScore

答案 3 :(得分:0)

如果您的目标是计算,请考虑使用MultiMap,即:http://lampwww.epfl.ch/~hmiller/scaladoc/library/scala/collection/mutable/MultiMap.html。由于您累积了计数,因此似乎不是避免副作用的理由。