微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scala – 如何访问和更新地图地图的可变地图中的值

我有一个三级数据结构(缩进和换行可读性):

scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map

scala> val m = Map("normal" -> Map("home" -> Map("wins" -> 0,"scores" -> 0),"away" -> Map("wins" -> 0,"scores" -> 0)))
m: scala.collection.mutable.Map[java.lang.String,scala.collection.mutable.Map[java.lang.String,Int]]] = 
Map((normal,Map(away -> Map(wins -> 0,scores -> 0),home -> Map(wins -> 0,scores -> 0))))

访问最内层数据(分数)需要大量打字:

import org.scalatest.{Assertions,FunSuite}

class MapExamplesSO extends FunSuite with Assertions {
  test("Update values in a mutable map of map of maps") {
    import scala.collection.mutable.Map
    // The m map is essentially an accumulator
    val m = Map("normal" -> 
                Map("home" -> Map("wins" -> 0,"scores" -> 0)
                  )
          )
    //
    // Is there a less verbose way to increment the scores ?
    //
    assert(m("normal").apply("home").apply("scores") === 0)

    val s1 = m("normal").apply("home").apply("scores") + 1
    m("normal").apply("home").update("scores",s1)

    assert(m("normal").apply("home").apply("scores") === 1)

    val s2 = m("normal").apply("home").apply("scores") + 2
    m("normal").apply("home").update("scores",s2)

    assert(m("normal").apply("home").apply("scores") === 3)
  }
}

有没有更简单的方式来修改分数的价值?

我是一个Scala新手,所以对上述代码的所有其他意见也是欢迎的.

解决方法

你不必使用“申请”,只是用“()”

m("normal")("home")("scores") = 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐