我是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. Scala不可變映射爲同一個鍵返回不同的值
- 2. boost hana:從一個集合和一個默認值創建一個映射
- 3. 按鍵值搜索不可變映射
- 4. Scala不可變映射協變
- 5. 如果密鑰不存在創建默認值
- 6. BizTalk映射:源記錄不存在,但需要映射並傳遞默認值
- 7. 如何使用C++中的鍵和值創建一個映射?
- 8. 在vim中映射一個默認的鍵綁定
- 9. 爲什麼不能指定Scala可變參數的默認值?
- 10. PHP函數檢查變量的存在,如果變量不存在,然後爲變量寫一個默認值
- 11. 在Java代碼中將Java映射轉換爲Scala不可變映射
- 12. nHibernate:與複合鍵的多對一映射中的默認值
- 13. XSLT默認變量值(如果值不存在)
- 14. sbteclipse默認不創建Scala項目?
- 15. 如何使用Java將scala不可變映射轉換爲JSON?
- 16. 默認情況下在斯卡拉映射一個空的ListBuffer
- 17. 爲可以覆蓋的`:order`創建一個默認值?
- 18. 如何清除一個immutable.js映射回其默認值
- 19. 爲什麼Map在默認情況下在Scala中不可變?
- 20. 散列映射鍵 - 如果存在映射
- 21. 如何使用兩個程序創建文件關聯,如果同時存在則創建一個默認值?
- 22. 如果它不存在,mongoose.connect默認創建一個Mongo數據庫嗎?
- 23. Scala的映射值
- 24. 蜂巢表創建一個默認值
- 25. 如何使映射鍵恢復到默認行爲
- 26. Scala默認值:如何在創建LinkedList時從Scala類型的Any中獲取默認值?
- 27. 如果第一個值不存在,是否可以將默認值賦值給變量?
- 28. 如果不存在,Angular JS默認創建段落
- 29. Ruby - 如果變量不存在,則返回默認值
- 30. C++ - 如何創建一個多重映射有4個變量和4個鍵
很好的解決方案!另一個天真的問題,我將元組更改爲數組,使其元素可以像這個映射(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