Scala 2.8和Map视图

时间:2010-07-16 15:24:49

标签: scala scala-2.8 lazy-evaluation

2.7 中,我可以执行以下操作:

val lazyM: Map[_, _] = map.projection.mapElements(v => expCalc(v)) //MAP VIEW

我找不到在 2.8 中实现此功能的方法,实际上以地图结束:

val m: Map[_, _] = map.view.map(kv => kv._1 -> expCalc(kv._2)).toMap //STRICT

这似乎是功能的重大损失,因此我认为它隐藏在某个地方的集合库中。有人有什么想法吗?

编辑 - 愚蠢地我认为mapValues与旧mapElements完全相同

1 个答案:

答案 0 :(得分:7)

有些令人惊讶的是,Map#mapValues产生了一个(转换的)视图:

scala> Map(1 -> 2, 3 -> 4, 5 -> 6)
res0: scala.collection.immutable.Map[Int,Int] = Map((1,2), (3,4), (5,6))

scala> res0.mapValues { v => println("computing from " + v); v + 1 }
computing from 2
computing from 4
computing from 6
res1: scala.collection.immutable.Map[Int,Int] = Map((1,3), (3,5), (5,7))

scala> res1(1)
computing from 2
res2: Int = 3

scala> res1(5)
computing from 6
res3: Int = 7