Scala Map:是否可以使用var的Int更新Int的值?

时间:2015-02-17 06:44:49

标签: scala scala-collections

这感觉就像一个愚蠢的问题,但这里有:

请考虑以下内容,使用var

更新Map中的Int值
var score: Int = _

val data = Map((
  ("things", "stuff") -> 0),
  (("uwot", "stuff") -> 0),
  (("isee", "stuff") -> 0))

data.map(element => {
  if (element._1._2 == "stuff") {
    score += 1
  }
  element._2 == score
})

取代

element._2 == score

我也试过

data(element._1).updated(element._1, score)

val result = data.get(element._1)
result == score

无济于事

任何指针?

1 个答案:

答案 0 :(得分:4)

Map data是不可变的,映射Map时得到的element也是不可变的。您需要将data.map(...)的结果分配给新的val

element._2 == score是一个布尔比较。它也是map函数的最后一个语句,因此您将每个元素(Map [[String,String],Int]类型)映射到一个布尔值,然后不将它分配给任何东西。

我认为你想要的是这样的:

val dataOut = data.map( element => {
  if(element._1._2 == "stuff") {
     score += 1
  }
  element._1 -> score
  }
)