我正在尝试在Scala中构建一个从整数到一组可变整数的可变映射。
例如,我想拥有表单1 - >的映射。 (2,3)并且能够更新 他们以后使用键值。我使用的代码如下:
import scala.collection.mutable._
val map = Map[Int, Set[Int]]()
map: scala.collection.mutable.Map[Int,scala.collection.mutable.Set[Int]] = Map()
map += (1 -> Set(2,3))
res15: map.type = Map(1 -> Set(2, 3))
到目前为止很好,但是当我尝试做类似
的事情时map.get(1) += 4
我得到val错误的分配。令我困惑的是map.get()应该返回一个 可以更新的类型scala.collection.mutable.Set集。有人可以请一些 点亮这里发生了什么?
答案 0 :(得分:3)
在这种情况下的问题是get()
返回一个选项(Option[scala.collection.mutable.Set[Int]]
),您需要“解压缩”:
map.get(1).get += 4
Map的get()
函数返回一个选项的原因是任何给定键都可能没有值,Scala不喜欢像Java API对应的那样抛出异常。
或者您可以使用apply()
方法,该方法直接返回请求的值并在发生故障时抛出异常:
map(1) += 4
我还没弄清楚为什么你会尝试使用你尝试的代码“重新分配val”错误。就我而言(Scala 2.10),它说如下:
<console>:12: error: value += is not a member of Option[scala.collection.mutable.Set[Int]]
map.get(1) += 1
您使用的是哪个版本的Scala?
答案 1 :(得分:0)
更优雅的方式是
map.get(1).map(_ += 4).getOrElse{map += 1 -> Seq(4)}