【发布时间】:2021-06-18 05:21:51
【问题描述】:
我想要一张地图,这样:
- 我可以更新它 -> 可变的
- 我可以有多个值 -> 旧的多地图
即我需要收集表格:
k1 -> v1, k1 -> v2, ..., k2 -> v1, k2 -> v2, k2 -> v3 等
归根结底,我需要收集所有这些信息:
k1 -> Seq(v1,v2), ..., k2 -> Seq(v1,v2,v3)
如何在 Scala 中做到这一点?
编辑
我在 Scastie 试过这个:
val m = new scala.collection.mutable.Map[Int,Int] with scala.collection.mutable.MultiMap[Int,Int]
m += (1 -> 2)
m += (1 -> 3)
m
但我明白了:
illegal inheritance;
<$anon: Int => Int with Int => scala.collection.mutable.Set[Int]> inherits different type instances of trait Map:
scala.collection.mutable.Map[Int,scala.collection.mutable.Set[Int]] and scala.collection.mutable.Map[Int,Int]
trait MultiMap in package mutable is deprecated (since 2.13.0): Use a scala.collection.mutable.MultiDict in the scala-collection-contrib module
【问题讨论】:
-
@IvanKurchenko 在我的编辑中查看弃用说明
-
@Robdigo 谢谢。好吧,随着消息逐渐减弱,您可以尝试继续使用
MultiDict -
@IvanKurchenko 也没有在 Scastie 工作。另外,问题更多的是在最后一部分,如何按照我问的方式更改集合
-
您可以使用
mutable.Map[Int, List[Int]]和updateWith向地图添加元素。您甚至可以编写自己的扩展方法以避免重复逻辑。
标签: scala collections