我想在迭代這個斯卡拉更新值,而迭代
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