2016-07-08 29 views
0

我有一個映射鍵,讓我們說:階:創建地圖與map.keys

m1:Map[String, Int] = Map(a -> 1, b -> 2, c -> 3, d -> 4) 

,我現在想創建具有相同的密鑰爲現有的地圖,取0作爲第二地圖每個鍵的值。所以它應該看起來像這樣:

m2:Map[String, Int] = Map(a -> 0, b -> 0, c -> 0, d -> 0) 

我在地圖定義中嘗試了一個for循環,但它並沒有真正的工作。我怎樣才能做到這一點?

謝謝!

回答

5

要創建新的地圖考慮

m1.keys.map(k => (k,0)).toMap 

,並使用了理解,上述

for ((k,v) <- m1) yield k -> 0 

的方法創建一個新的地圖。這與使用mapValues形成對原始地圖的視圖並保持每當被查詢時應用於原始地圖的變換函數相反。就變換函數是透明的,即它不依賴於上下文而言,這種方法是合理的。但是,當轉換函數引用的上下文發生更改時,查詢原始映射的輸出也可能會更改。這是通過創建一個新的轉換後的地圖來防止的。

+0

答案完美工作,謝謝! – dumm3rjung3

2

你可以只mapValues

val m2 = m1.mapValues((v) -> 0) 

編輯:閱盡@榆樹的有關參考意義