2017-10-12 85 views

回答

4

使用withDefaultValue创建地图后:

import scala.collection.mutable 

val map = mutable.Map[Int,(Int, Int)]().withDefaultValue((0, 0)) 
+0

很好的解决方案!另一个天真的问题,我将元组更改为数组,使其元素可以像这个映射(0)+ = 1一样递增。但是声明var map = mutable.Map [Int,Array [Int,Int]]()。withDefaultValue(Array [0,0])会导致错误 – user1269298

+0

尝试'var map = mutable.Map [Int,Array [ Int)]]()。withDefaultValue(Array((0,0)))'如果你想它是一个_tuples_的数组。或者'var map = mutable.Map [Int,Array [Int]]()。withDefaultValue(Array(0))''如果你想让它成为_ints_数组。 –

+0

谢谢,这正是我需要的! var map = mutable.Map [Int,Array [Int]]()。withDefaultValue(Array(0,0)) – user1269298

1

你可能lookign为.getOrElseUpdate这需要关键,如果给定值不存在更新。

scala> val googleMap = Map[Int, (Int, Int)]().empty 
googleMap: scala.collection.mutable.Map[Int,(Int, Int)] = Map() 

scala> googleMap.getOrElseUpdate(100, (0, 0)) 
res3: (Int, Int) = (0,0) 

scala> googleMap 
res4: scala.collection.mutable.Map[Int,(Int, Int)] = Map(100 -> (0,0)) 

您也可以含蓄地传递orElse部分,

scala> implicit val defaultValue = (0, 0) 
defaultValue: (Int, Int) = (0,0) 

scala> googleMap.getOrElseUpdate(100, implicitly) 
res8: (Int, Int) = (0,0) 

scala> googleMap 
res9: scala.collection.mutable.Map[Int,(Int, Int)] = Map(100 -> (0,0)) 
+0

很高兴知道。感谢分享! – user1269298

相关问题