首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mutable.Map和mutable.Set折叠不起作用

使用mutable.Map和mutable.Set折叠不起作用
EN

Stack Overflow用户
提问于 2019-02-04 18:53:41
回答 2查看 65关注 0票数 0

我只是想知道为什么我的值分组在下面的代码中不起作用。从技术上讲,Map和Set都是可变的,所以my add(intValue)应该更改集合(间接地更改聚合器映射)。

代码语言:javascript
复制
import scala.collection.mutable._

val original = Iterator[(String, Int)](
  "one" -> 1,
  "two" -> 20,
  "three" -> 30,
  "one" -> 11
)

val folded = original.foldLeft(
  Map[String, Set[Int]]().withDefaultValue(Set.empty))
{
  case (agg, (strVal, intVal)) =>
    //agg += ((strVal, agg(strVal) + intVal))  <-- option 1  works
    agg(strVal).add(intVal)  // <--- option 2 does not work
    agg                      // <--- option 2 does not work   
}

对于选项1,结果是预期的(“一个”->集的分组(1,11) .)对于选项2,我得到一个空的Map。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-04 19:06:10

.withDefaultValue不向Map添加值。使用.getOrElseUpdate(strVal, Set.empty).add(intVal)代替。

票数 2
EN

Stack Overflow用户

发布于 2019-02-04 19:21:22

当您用默认值调用此映射上的get( key )时,它从未添加您传递的键,从它的外观来看,它在映射中的“空键”行中为所有默认值添加了另一个键--这就是为什么每次执行get时都会得到相同的设置,但这不是您要寻找的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54522572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档