Scala 如何将分类地图转换为可变地图

Scala 如何将分类地图转换为可变地图,scala,map,Scala,Map,我有以下格式的数据类型: Iterable[scala.collection.SortedMap[String,Double]] 我需要以下数据类型: scala.collection.mutable.Map[String, Double] 谢谢首先将迭代器转换为序列,然后再将序列转换为可变映射。为了说明这一点,让我们举个例子 val a: scala.collection.SortedMap[String,Double] = SortedMap("a" -> 1.1, "b" -&g

我有以下格式的数据类型:

Iterable[scala.collection.SortedMap[String,Double]]
我需要以下数据类型:

scala.collection.mutable.Map[String, Double]

谢谢

首先将迭代器转换为序列,然后再将序列转换为可变映射。为了说明这一点,让我们举个例子

val a: scala.collection.SortedMap[String,Double] = SortedMap("a" -> 1.1, "b" -> 2.2)
然后


注意,结果映射中的顺序丢失。

先将迭代器转换为序列,然后再将序列转换为可变映射。为了说明这一点,让我们举个例子

val a: scala.collection.SortedMap[String,Double] = SortedMap("a" -> 1.1, "b" -> 2.2)
然后


注意,结果映射中的顺序丢失。

假设您想要将scala.collection.SortedMap[String,Double]转换为scala.collection.mutable.Map[String,Double],您可以执行以下操作:

val m1 = SortedMap("key1" -> 1.0, "key2" -> 2.0) // immutable
val m2 = scala.collection.mutable.Map[String, Double]() ++= m1 // mutable
但是,如果您真的想将Iterable[scala.collection.SortedMap[String,Double]]转换为scala.collection.mutable.Map[String,Double],那么您到底希望得到什么结果就有点不清楚了

希望有帮助

编辑:那就意味着你真的想把Iterable转换成单个可变映射。好吧,你可以这样做,尽管这看起来是一个非常奇怪的转换。很高兴知道您为什么要转换它:

val m1 = SortedMap("key1" -> 1.0, "key2" -> 2.0) // immutable
val m2 = SortedMap("key3" -> 3.0, "key4" -> 4.0) // immutable
val it = Iterable(m1, m2)

val z = scala.collection.mutable.Map[String, Double]() ++= it.foldLeft[List[(String, Double)]](Nil)((x,m) => m.toList ::: x)

假设您想要将scala.collection.SortedMap[String,Double]转换为scala.collection.mutable.Map[String,Double],您可以执行以下操作:

val m1 = SortedMap("key1" -> 1.0, "key2" -> 2.0) // immutable
val m2 = scala.collection.mutable.Map[String, Double]() ++= m1 // mutable
但是,如果您真的想将Iterable[scala.collection.SortedMap[String,Double]]转换为scala.collection.mutable.Map[String,Double],那么您到底希望得到什么结果就有点不清楚了

希望有帮助

编辑:那就意味着你真的想把Iterable转换成单个可变映射。好吧,你可以这样做,尽管这看起来是一个非常奇怪的转换。很高兴知道您为什么要转换它:

val m1 = SortedMap("key1" -> 1.0, "key2" -> 2.0) // immutable
val m2 = SortedMap("key3" -> 3.0, "key4" -> 4.0) // immutable
val it = Iterable(m1, m2)

val z = scala.collection.mutable.Map[String, Double]() ++= it.foldLeft[List[(String, Double)]](Nil)((x,m) => m.toList ::: x)

看起来更像是黑客,但无论如何

scala> val a = collection.SortedMap("a" -> 1.1, "b" -> 2.2)
a: scala.collection.SortedMap[String,Double] = Map(a -> 1.1, b -> 2.2)

scala> type MMap = collection.mutable.Map[String, Double]
defined type alias MMap

scala> a.to[({type l[A] = collection.mutable.Map[String, Double]})#l]
res1: scala.collection.mutable.Map[String,Double] = Map(b -> 2.2, a -> 1.1)
将映射转换为可变的.Map

将Iterable[Map]转换为mutable.Map


还请注意,在这种情况下,相交关键点将替换为后面的关键点。请参阅如何使用相同的键合并地图。

这看起来更像是一种黑客行为,但无论如何

scala> val a = collection.SortedMap("a" -> 1.1, "b" -> 2.2)
a: scala.collection.SortedMap[String,Double] = Map(a -> 1.1, b -> 2.2)

scala> type MMap = collection.mutable.Map[String, Double]
defined type alias MMap

scala> a.to[({type l[A] = collection.mutable.Map[String, Double]})#l]
res1: scala.collection.mutable.Map[String,Double] = Map(b -> 2.2, a -> 1.1)
将映射转换为可变的.Map

将Iterable[Map]转换为mutable.Map


还请注意,在这种情况下,相交关键点将替换为后面的关键点。请参阅如何使用相同的键合并地图。

感谢您的回复,但是使用您的语法,我得到以下错误:错误:57,95类型不匹配;找到:Seq[scala.collection.SortedMap[String,Double]]必需:Seq[?,?]是关于答案中的类型Seq[…SortedMap],used.iterator和the.toSeq。我使用了您编写的语法,包括.iterator。我得到了上面的评论谢谢你的回复,但是使用你的语法我得到了以下错误:错误:57,95类型不匹配;找到:Seq[scala.collection.SortedMap[String,Double]]必需:Seq[?,?]是关于答案中的类型Seq[…SortedMap],used.iterator和the.toSeq。我使用了您编写的语法,包括.iterator。我得到了上面的评论,谢谢你的回复,但它仍然不起作用。我得到以下错误:错误:58,54类型不匹配;找到:Iterable[scala.collection.SortedMap[String,Double]]必需:scala.collection.TraversableOnce[String,Double]@user3370773那么我猜你想摆脱Iterable。检查我的答案的编辑,看看它是否适合你。谢谢你的回复,但它仍然不起作用。我得到以下错误:错误:58,54类型不匹配;找到:Iterable[scala.collection.SortedMap[String,Double]]必需:scala.collection.TraversableOnce[String,Double]@user3370773那么我猜你想摆脱Iterable。检查我的答案的编辑,看看它是否适合你。