可变的多重映射到不可变的映射
问题描述:
我创建了一个MultiMap
可变的多重映射到不可变的映射
val ms =
new collection.mutable.HashMap[String, collection.mutable.Set[String]]()
with collection.mutable.MultiMap[String, String]
它,它已经填充了条目后,必须传递给期望一个Map[String, Set[String]]
的功能。直接传递ms
不工作,并试图通过toMap
ms.toMap[String, Set[String]]
把它转换成一个不可变的映射产生
Cannot prove that (String, scala.collection.mutable.Set[String]) <:< (String, Set[String]).
能,而无需手动遍历ms
和插入所有条目到一个新的待解决不可变的地图?
答
看来问题是可变的设置。所以变成一成不变套的工作原理:通过以下丹尼尔索布拉尔建议
scala> (ms map { x=> (x._1,x._2.toSet) }).toMap[String, Set[String]]
res5: scala.collection.immutable.Map[String,Set[String]] = Map()
甚至更好:
scala> (ms mapValues { _.toSet }).toMap[String, Set[String]]
res7: scala.collection.immutable.Map[String,Set[String]] = Map()
答
如何使用mapValues
单独更改Set
?
什么是对的向下投票的原因吗? – pedrofurla 2012-07-08 22:26:10
我没有downvote,但也许这是因为它是不必要的冗长,当你可以只写'ms.mapValues(_。toSet)' – 2012-07-09 03:42:48
我真的不在乎谁投了票,只是为什么。在我看来,冗长不是问题的重点,也不是答案,所以它不应该是投票的理由。 – pedrofurla 2012-07-09 15:28:53