我想维护Map
个case class
个对象,以便我可以添加新实例并通过ID查找它们。
我当前(非常丑陋)的解决方案(剥离):
case class cc(i: Int)
var myccmap: Map[Int, cc] = null
def addcc(thecc: cc): cc = {
if (myccmap == null) {
myccmap = Map(thecc.hashCode, thecc)
}
else {
myccmap = myccmap ++ Map(thecc.hashCode, thecc)
}
thecc
}
然后在其他地方,我可以使用val somecc = addcc(cc(56))
来维护我Map
个cc
个对象添加addcc
。
这样,我可以将密钥(只是hashCode)与文件中的一些数据一起存储,然后当我读取文件时,我可以通过查找hashCode来提取cc
对象(可能会或可能不会出现在myccmap
)中。
有没有更好的方法来做到这一点,理想情况下不依赖于对null
的检查?
答案 0 :(得分:2)
您的代码可以简化,如果您想要使用散列,只需使用HashSet
:
import collection.immutable.HashSet
case class Cc(i: Int)
var myccmap: HashSet[Cc] = HashSet.empty
def addcc(thecc: Cc): thecc.type = {
myccmap += thecc
thecc
}
此外,按照惯例,类应以大写字母开头。我还使用单例类型作为addcc
的返回值,这样很清楚这个函数真的只返回它的参数
答案 1 :(得分:1)
取决于您是否真的想要key
。我想仍然需要哈希码的密钥,因为你将密钥存储在某个地方。并且要注意,在大多数情况下不要使用var,相反,使用可变映射会有所帮助。
case class cc(i: Int)
val myccmap: mutable.Map[Int, cc] = mutable.Map.empty
def addcc(thecc: cc): cc = {
myccmap += (thecc.hashCode -> thecc)
thecc
}