我是scala新手。作为标题,我想创建一个可变映射Map[Int,(Int, Int)]
并且默认值为元组(0,0),如果键不存在。在Python中,“defaultdict”使这种努力变得容易。在Scala中做这件事的优雅方式是什么?scala - 创建一个可变映射,默认值为(0,0)如果键不存在
0
A
回答
4
使用withDefaultValue
创建地图后:
import scala.collection.mutable
val map = mutable.Map[Int,(Int, Int)]().withDefaultValue((0, 0))
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
相关问题
- 1. boost hana:从一个集合和一个默认值创建一个映射
- 2. 如果密钥不存在创建默认值
- 3. BizTalk映射:源记录不存在,但需要映射并传递默认值
- 4. 在vim中映射一个默认的键绑定
- 5. 在Java代码中将Java映射转换为Scala不可变映射
- 6. nHibernate:与复合键的多对一映射中的默认值
- 7. 如何使用Java将scala不可变映射转换为JSON?
- 8. 默认情况下在斯卡拉映射一个空的ListBuffer
- 9. 为可以覆盖的`:order`创建一个默认值?
- 10. 为什么Map在默认情况下在Scala中不可变?
- 11. 如何使用两个程序创建文件关联,如果同时存在则创建一个默认值?
- 12. 蜂巢表创建一个默认值
- 13. 如果第一个值不存在,是否可以将默认值赋值给变量?
- 14. 如何使映射键恢复到默认行为
- 15. C++ - 如何创建一个多重映射有4个变量和4个键
- 16. 在Scala中将Seq的可变Map转换为IndexedSeq的不可变映射
- 17. 在Java中我可以有一个键 - 键映射(而不是键值)吗?
- 18. 如何为一个对象创建默认值? PHP
- 19. 从mixin中创建一个sass映射值 - 全局保存
- 20. 默认值DateTime列,与EF4映射
- 21. 在NHibernate映射中为未使用的列提供默认默认值
- 22. mysql在表中找不到值时将值映射为默认值
- 23. std ::映射一个键,两个值
- 24. 如何映射映射的键和值?
- 25. 如何推迟关键NMAP其默认映射在vim
- 26. 如何创建一个变量,如果不存在于PHP中?
- 27. 如何从seq创建不可变的映射/集合?
- 28. 键值映射
- 29. 如何创建一个会话变量,如果事先不存在,但如果变量存在,但为空
- 30. 作为默认参数的STL映射
很好的解决方案!另一个天真的问题,我将元组更改为数组,使其元素可以像这个映射(0)+ = 1一样递增。但是声明var map = mutable.Map [Int,Array [Int,Int]]()。withDefaultValue(Array [0,0])会导致错误 – user1269298
尝试'var map = mutable.Map [Int,Array [ Int)]]()。withDefaultValue(Array((0,0)))'如果你想它是一个_tuples_的数组。或者'var map = mutable.Map [Int,Array [Int]]()。withDefaultValue(Array(0))''如果你想让它成为_ints_数组。 –
谢谢,这正是我需要的! var map = mutable.Map [Int,Array [Int]]()。withDefaultValue(Array(0,0)) – user1269298