我正在尝试在更新此映射[String,WordCount]中的值
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]()
Run Code Online (Sandbox Code Playgroud)
函数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
}
Run Code Online (Sandbox Code Playgroud)
我正在使用:
targets.map(m => m._2.withEnt(calEnt(m._2.count, m._2.links)))
Run Code Online (Sandbox Code Playgroud)
用于迭代地图并计算的新值ent
并使用进行更新withEnt
。我可以在控制台中添加新值,但未在地图内部设置。这样做的方式是什么?请。
使用foreach:
targets.foreach(m => targets(m._1) = m._2.withEnt(calEnt(m._2.count, m._2.links)))
Run Code Online (Sandbox Code Playgroud)
独立的示例:
val m = scala.collection.mutable.HashMap[Int, Int](1 -> 1, 2 -> 2)
println(m)
m.foreach(p => m(p._1) = p._2 + 1)
println(m)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4486 次 |
最近记录: |