我想在迭代这个斯卡拉更新值,而迭代
case class WordCount(name: String,
id: Int,
var count: Double,
var links: scala.collection.mutable.HashMap[String, Double],
var ent: Double) {
def withEnt(v: Double): WordCount = {println(s"v: $v"); copy(ent = v)}
}
var targets = mutable.HashMap[String, WordCount]()
功能calEnt更新地图[字符串,字计数]值是:
def calEnt(total: Double, links: scala.collection.mutable.HashMap[String, Double]): Double = {
var p: Double = 0.0
var ent: Double = 0.0
links.map(d => {
p = d._2/total
ent -= p * Math.log(p)
})
return ent
}
而且我使用的是:
targets.map(m => m._2.withEnt(calEnt(m._2.count, m._2.links)))
的迭代地图,计算新的价值ent
与此更新。我可以在控制台中注入新的值,但它不在地图内部设置。有什么办法做到这一点?请。
这几乎是** **从来没有意义的具有可变数据结构在'var' - 无论是使用'具有可变数据结构的val,或具有不可变数据结构的var;另外,请注意,使用'var' + immutable;看到http://stackoverflow.com/questions/11386559/val-mutable-versus-var-immutable-in-scala – 2014-10-28 20:45:13