我想創建一個Counter[A]
數據結構(靈感來自Python的Counter),它擴展了Map[A, Int]
,它只是保留A
類型的項目出現次數。我希望它有2種額外的方法add(item: A)
和remove(item: A)
這遞增/計數器,item
相關的遞減和ofcourse我也希望所有的漂亮斯卡拉收集方法,如map
,filter
等所以我可能要延長Map[A, Int]
。但是,我很困惑應該從Map
中爲其他Scala收集方法簡單地工作而重寫/實現哪些最小方法。什麼Scala地圖方法來覆蓋
1
A
回答
4
考慮用代理替換繼承。換句話說,你的班級可以延伸Map[A, Int]
,但它應該包含一個私人的Map[A, Int]
成員。所有對您班級的呼叫只需將相同的呼叫委託給該成員。
下面是部分實現我的建議:
class MyClass[A, Int] extends collection.immutable.Map[A, Int] {
private val map = collection.immutable.Map.empty[A, Int]
def get(key: A): Option[Int] = {
map.get(key)
}
def iterator: Iterator[(A, Int)] = {
map.iterator
}
def -(key: A): Map[A, Int] = {
map - key
}
def +[B1 >: Int](kv: (A, B1)): Map[A, B1] = {
map + kv
}
}
1
你應該看這個: http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html 它解釋了Scala的建設新的集合的細節過程。 如果你不想閱讀整篇文章,你可以直接跳到「整合新的集合和地圖」部分,通過示例展示如何構建新的地圖 - 正是你想要做的。
相關問題
- 1. 什麼方法來更新我的谷歌地圖覆蓋視圖?
- 2. 覆蓋Scala地圖的特徵添加方法
- 3. 在scala中覆蓋的調用方法
- 4. scala覆蓋靜態Java方法
- 5. 覆蓋scala swing中textarea的paint方法
- 6. 爲什麼Finalize方法不能覆蓋
- 7. 什麼是覆蓋表設置方法?
- 8. 方法覆蓋和功能覆蓋/超載有什麼區別
- 9. 什麼是最好的/正確的方式來覆蓋圖像
- 10. 地圖覆蓋
- 11. scala覆蓋無
- 12. 構圖覆蓋方法
- 13. 語法來調用未覆蓋方法
- 14. 什麼是覆蓋位圖數據的最有效方法
- 15. 覆蓋方法
- 16. 覆蓋方法
- 17. 覆蓋方法
- 18. 覆蓋方法
- 19. 覆蓋'+'方法
- 20. 覆蓋Python類__str__方法的最佳方法是什麼?
- 21. 爲什麼實例方法不能覆蓋靜態方法
- 22. Android,地圖覆蓋
- 23. Android地圖覆蓋
- 24. 階覆蓋地圖
- 25. Java方法覆蓋 - 「方法不會覆蓋超級方法...」
- 26. Scala地圖過濾方法
- 27. 沒有合適的方法來覆蓋
- 28. 覆蓋類的方法來檢查emptyness
- 29. getPageTitle()不覆蓋來自FragmentPagerAdapter()的方法
- 30. 正確的方法來覆蓋Control.ControlCollection
但是,我將不得不委託Map中的所有100個左右的方法嗎?我想覆蓋最小的一組方法...... – pathikrit
不是。我上面提供的類代表了您必須實現的最小程度。所以現在另一個類可以說'val map = new MyMap [Int,Int]'。因爲'filter',例如,是'Map'特性中的一個具體方法,所以你不必實現它。但稱它可能會使客戶與其行爲混淆。所以你可以用你的IDE用'super'實現所有的東西,或者你可以讓你的類不擴展'Map'。希望其他人也會和其他更好的解決方案一起合作,因爲我也一直在學習Scala。 – Vidya
我剛在這裏實現它:https://github.com/pathikrit/scalgos/commit/597baeb406d92c179e919faff3c3fe1d8141193e – pathikrit