gpt4 book ai didi

Scala:为什么 mapValues 会生成 View ,是否有稳定的替代方案?

转载 作者:行者123 更新时间:2023-12-03 05:44:39 26 4
gpt4 key购买 nike

刚才我很惊讶地得知mapValues产生一个 View 。结果如下例所示:

case class thing(id: Int)
val rand = new java.util.Random
val distribution = Map(thing(0) -> 0.5, thing(1) -> 0.5)
val perturbed = distribution mapValues { _ + 0.1 * rand.nextGaussian }
val sumProbs = perturbed.map{_._2}.sum
val newDistribution = perturbed mapValues { _ / sumProbs }

这个想法是我有一个分布,它受到一些随机性的干扰,然后我将其重新标准化。该代码实际上未能达到其初衷:since mapValues产生 view , _ + 0.1 * rand.nextGaussian每当 perturbed 时总是重新评估已使用。

我现在正在做类似 distribution map { case (s, p) => (s, p + 0.1 * rand.nextGaussian) } 的事情,但这有点冗长。所以这个问题的目的是:

  1. 提醒那些不知道这一事实的人。
  2. 寻找他们做出 mapValues 的原因输出view
  3. 是否有替代方法生产混凝土 Map .
  4. 是否还有其他常用的收集方法存在此陷阱。

谢谢。

最佳答案

有一张关于此问题的票,SI-4776 (作者:YT)。

介绍它的提交是这样说的:

Following a suggestion of jrudolph, made filterKeys and mapValues transform abstract maps, and duplicated functionality for immutable maps. Moved transform and filterNot from immutable to general maps. Review by phaller.

我无法找到 jrudolph 的原始建议,但我认为这样做是为了提高 mapValues 的效率。提出这个问题,这可能会让人感到惊讶,但是如果您不太可能多次迭代这些值,mapValues会更有效。

作为一种解决方法,可以执行 mapValues(...).view.force 来生成新的 Map

关于Scala:为什么 mapValues 会生成 View ,是否有稳定的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com