簡體   English   中英

如何將SortedMap轉換為可變地圖

[英]How to convert a SortedMap to mutable Map

我有以下格式的數據類型:

Iterable[scala.collection.SortedMap[String,Double]]

並且我需要以下數據類型:

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

謝謝

首先將迭代器轉換為序列,然后將其轉換為可變Map 為了說明這一點,例如

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

然后

val m = scala.collection.mutable.Map( a.iterator.toSeq: _*)
m: scala.collection.mutable.Map[String,Double] = Map(b -> 2.2, a -> 1.1)

注意,結果Map的順序丟失了。

假設您想要將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轉換為mutable.Map

scala> a.to[({type l[a] = MMap})#l]
res0: scala.collection.mutable.Map[String,Double] = Map(b -> 2.2, a -> 1.1)

Iterable[Map]轉換為mutable.Map

scala> val as = Iterable.fill(1)(a)
as: Iterable[scala.collection.SortedMap[String,Double]] = List(Map(a -> 1.1, b -> 2.2))

scala> val ms: MMap = as.flatMap(_.to[({type l[a] = MMap})#l])(collection.breakOut)
ms: MMap = Map(b -> 2.2, a -> 1.1)

另請注意,在這種情況下,相交的鍵將被以后的鍵替換。 有關如何使用相同的鍵合並地圖的信息,請參見這一本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM