fre*_*oma 1 functional-programming scala immutability
给定 a Map[Int, Set[Int]],如何修改 Map 的单个值,在此过程中生成一个新值,例如:
val x = Map(1 -> Set(1,2,3))
x(1) + 5 // This creates a new Set, but not a new Map
val y = x(1) change { x => x + 5 }
// The previous functionality is what I'm looking for
// z: Set[Int]] = List(Set(1, 2, 3, 5))
Run Code Online (Sandbox Code Playgroud)
正如罗宾格林所建议的那样,镜头是为这项工作而制造的。事实上,你想要一个部分镜头,因为地图是键 -> 值的部分函数。
Scalaz 7 包括将mapVPLens部分镜头 ( PLens) 设置为选定键处的值的函数:
import scalaz.PLens._
val x = Map(1 -> Set(1,2,3))
mapVPLens(1) mod ((_: Set[Int]) + 5, x) // Map(1 -> Set(1, 2, 3, 5))
Run Code Online (Sandbox Code Playgroud)
修改不存在的键的值将不起作用:
mapVPLens(9) mod ((_: Set[Int]) + 5, x) // Map(1 -> Set(1,2,3))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |