Scala 在迭代时更新映射中的值

标签 scala dictionary

我正在尝试在迭代时更新 map [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]()

函数 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)))

用于迭代 map 并计算 ent 的新值并使用 withEnt 更新该值。我可以在控制台中输入新值,但它没有在 map 内设置。有什么方法可以做到这一点?请。

最佳答案

使用foreach:

targets.foreach(m => targets(m._1) = m._2.withEnt(calEnt(m._2.count, m._2.links)))

独立的示例:

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)

关于Scala 在迭代时更新映射中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617494/

相关文章:

python - 是否有任何简单的方法来交换值是列表的 python 字典键值

java - 我认为我可能误解了 Map 类方法

scala - Scala 中递归可变参数函数的语法

exception - Scala 有智能编译器吗?

scala - 这种提升功能有名字吗?

scala - 如何启用 Source.Queue 背压

java - Guava 映射将类实例存储为键和 int 值

java - 为什么使用 akka 事件处理程序进行日志记录

java - i-1 访问 TreeMap

c++ - 在 std::map<..., boost::any> 中初始化子图