2014-03-28 97 views

回答

10
scala> m.mapValues(_.toInt) 
res0: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3) 
+1

注意:與大多數Scala中的集合轉換不同,'mapValues'是懶惰的 - 每次引用地圖值時都會應用轉換函數。 – ghik

5

正如Brian的回答顯示,mapValues是做到這一點的最好辦法。

可以實現使用模式匹配相同的效果,這應該是這樣的:

m.map{ case (k, v) => (k, v.toInt)} 

和(如果你想改變的關鍵,以及例如)在其他情況下非常有用。

請記住,您正在對Map中的每個條目進行模式匹配,表示爲tuple2,而不是整個地與Map對齊。

您還必須使用圍繞case聲明的大括號{},以保持編譯器的快樂。

+0

花括號不是強制性的,但風格上更好。 – euphoria83

+0

在這種特殊情況下(不是雙關語),它們是必需的。用圓括號替換它們會產生:'錯誤:簡單表達式的非法啓動「。另見http://stackoverflow.com/a/4387118/699224 – DNA

相關問題