我正面臨一個問題: 我想更改其中的一個元素,但代碼正在更改所有元素。 我一定在做錯事。 這是我有:Scala:更改地圖列表中的值
var critics: Map[String, List[(String, Double)]] = Map(
"First" -> List(("a", 1.0), ("b", 2.0)),
"Second" -> List(("c", 3.0), ("d", 4.0))
)
def setNewRating(keyMap: String, param1: String, newRating: Double) = {
val newList = critics(keyMap).map{case (param1, _) => (param1, newRating); case x => x}
critics = critics + (keyMap -> newList)
}
println(critics)
setNewRating("First", "b", 5.0)
println(critics)
所以,我正在尋找的關鍵「第一」,讓我想改變「B」爲2.0至5.0,但我得到的結果是列表:
critics: Map[String,List[(String, Double)]] = Map(First -> List((a,1.0), (b,2.0)), Second -> List((c,3.0), (d,4.0)))
setNewRating: (keyMap: String, param1: String, newRating: Double)Unit
Map(First -> List((a,1.0), (b,2.0)), Second -> List((c,3.0), (d,4.0)))
Map(First -> List((a,5.0), (b,5.0)), Second -> List((c,3.0), (d,4.0)))
該代碼改變了所有的值!
在此先感謝,
是的,我也不喜歡這個變種的事情,但我不知道我該怎麼做一個「階路」(我有一個Java背景) !也許從該方法返回一個新的地圖? – MLeiria
是的,返回一張新地圖,就是這樣。另外,將它作爲輸入傳遞將是一個好主意(「好」功能不會引起副作用,並且不依賴外部數據):'println(setNewRating(critters,「First」,「b」,5 ))' – Dima