我一直在用可变地图计算出现次数:
var bar = collection.mutable.Map[Int, Int]().withDefaultValue(0)
现在bar(a) += b
工作得很好,无论密钥a
是否bar
已经存在(在这种情况下,它将被添加)。
我用可变映射的可变映射尝试了同样的事情:
var foo = collection.mutable.Map[Int, collection.mutable.Map[Int, Int]]().
withDefaultValue(collection.mutable.Map().withDefaultValue(0))
foo(a)(b) += x
没有语法糖怎么看?
使用Scala 中的所有语法糖实例是什么?我假设它扩展到:
foo.apply(a).put(b, foo.apply(a).apply(b) + x)
但是,为什么这不会foo
像介绍性示例中那样相应地更新自身(即,如果之前不存在key,foo
则不会有专用的 key 值)?a
编辑:正如Perseids 指出的那样,foo(a)(b) += x
将更改可变的默认值。这是一个理想的功能吗?按照DaoWengetOrElseUpdate
的建议使用似乎是克服这两个问题的最佳方法。但是,虽然这对于 type 的函数很有效,但对于 type 的函数Int => Int => Int
来说确实很麻烦Int => Int => Int => Int => Int
。所以我仍然很高兴有任何建议!