【问题标题】:Why does Map.mapValues change the answer [duplicate]为什么 Map.mapValues 会改变答案[重复]
【发布时间】:2017-07-19 07:27:29
【问题描述】:

为什么当我重新访问 MapValues 的结果时它会改变?它不应该是不可变的吗。

考虑以下菊石会议。

stephen@ import scala.util.Random 
import scala.util.Random
stephen@ Seq("a").map(_ => Random.nextInt) 
res1: Seq[Int] = List(1035918980)
stephen@ res1 
res2: Seq[Int] = List(1035918980)
// re accessing Seq.map doesnt change
stephen@ Map("a" -> "a").mapValues(_ => Random.nextInt()) 
res3: Map[String, Int] = Map("a" -> 653125272)
stephen@ res3 
res4: Map[String, Int] = Map("a" -> -694232910)
// re accessing Map.mapValues changes

【问题讨论】:

    标签: scala


    【解决方案1】:

    根据the ScaladocmapValues 返回包装原始集合的视图,而不是复制(转换后的)数据。由于这只是一个视图,而不是其本身的集合,因此每次访问它时都需要重新评估它。

    这与map 不同,the scaladoc 提到返回一个新集合,而不仅仅是引用原始集合的视图。

    【讨论】:

      【解决方案2】:

      mapValues 返回地图的视图。每次访问时都会应用值转换,而不是持久保存在内存中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 2020-12-01
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多